2d arrays with pointers
到目前为止,我有以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> int foo (int *pointer, int row, int col); int main() { int array[3][3] ={ {1,2,3},{4,5,6},{7,8,9}}; int *pointer= array[0]; int row = 2; int col = 2; int answer = foo (pointer, row, col); printf("%d", answer); //prints 5 (which is wrong) printf("%d", array[2][2]); //prints 9 } int foo (int *pointer, int row, int col){ //I don't want to use any square brackets here, unless I really have to. int value; value = *((int *)(pointer+row)+col); return value; } |
所以我的主要问题是传递一个二维指针,请详细解释,因为我还是一个新的编码员。我不想真正改变我正在传递的内容(就像我想在foo中使用指针(指针、行、列)而不是foo(数组、行、列)。
passing a 2D pointer
从您(AB)如何使用这个术语来看,很明显您错误地认为指针和数组是相同的。它们不是。
如果要使用指针访问多维数组,则必须指定其所有维度(第一个维度除外,最里面的一个维度除外),并正确使用指针算法,可能使用指向数组的指针,因为多维数组在内存中是连续的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | const size_t h = 2; const size_t w = 3; int arr[h][w] = { { 1, 2, 3 }, { 4, 5, 6 } }; int *p = &arr[1][2]; int *q = arr[1]; int (*t)[3] = &arr[1]; printf("arr[1][2] == %d == %d == %d ", *p, q[2], (*t)[2]); return 0; |
1 | int *pointer= array[0]; |
而不是用这个
1 | int *pointer= &array[0]; |
或
1 | int *pointer= array; |