还有想顺便问一下 int (*p)[2],[3][2]=..{{1,2},{3,4},{5,6}};这段程序如何理解呀?就是说()里边的*p是什么意思?
谢谢您的回答,你讲的很详细的,就是如果你愿意举一个指针与二维数组之间的例子来说明*p和**p指的是哪一个元素可能我就更清楚一点了.. ,能不能给举个例子呢?
追答好的
#include
int main()
{
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int (*p)[3] = a;
printf("%d\n",**p);
}
在这里 打印出的是 1,就是第一行的第一个字符。
但是如果你打印*p 的话是错误的。正如我上面说的*p其实是二维数组的第一行的地址。
既然你学过指针,你就应该知道想打印指针地址指向的元素,则需要加上“*”。因此打印**p
就出现了1.
如果你想打印第二个元素 那么就这样写 *(*p+1)。
你可以理解一下,*p既然指向的是第一行的首地址,那么*p+1就是第一行下一个元素的地址,
然后打印只需在前面加上*号即可,这和一维的数组其实是一个道理。
如果你想打印第二行的元素,不难推断 *(p+1)就是第二行的首地址,其他同上。