我已经阅读了这些文章http://eli.thegreenplace.net/2010/01/11/pointers-to-arrays-in-c/ http://eli.thegreenplace.net/2010/04/06/pointers- vs-arrays-in-c-part-2d/
我想进一步解释发生了什么。
int joe[] = {1, 2, 3, 4};
void test(int (*p)[4])
这是一个指向数组的指针,它不同于
void test(int *d);
这将是指向传递的数组的第一个元素的指针,或者是另一个指针的副本。我可不可以做?
*p = joe //I guess not, I'm obtaining the array passed, and I'm trying to reassign it (which can't be done)
d = joe //I guess not, but I would like to know what would happen to d
*d = joe //Same as above
d = &joe //I'm giving to d the address of joe, what will it be?
哪些是正确的,哪些是错误的,以及为什么。
在关于二维数组(实际上只是一维数组)的文章中,他写道:
void bar(int arr[2][3], int m, int n)
void bar(int arr[][3], int m, int n)
void bar(int (*arr)[3], int m, int n)
都是正确的。
1)问题:
void bar(int arr[][3], int m, int n)
void bar(int arr*[3], int m, int n)
是相同的?如果不是,它们之间有什么区别?
2)问题:
void bar(int arr[][3], int m, int n)
void bar(int (*arr)[3], int m, int n)
它们之间有什么区别,为什么它们都有效?
我非常感谢详细解释背后发生的事情,我希望问题很清楚。