想向大家问一个关于c语言的问题:行指针与二维数组,行指针诗歌什么概念呀?

还有想顺便问一下 int (*p)[2],[3][2]=..{{1,2},{3,4},{5,6}};这段程序如何理解呀?就是说()里边的*p是什么意思?

我们正常情况下例如 int a[10];int *p = a;
p指向的就是a数组的首地址。
*p就是里面的第一个元素。

那么再到二维数组。
指针p指向一个二维数组,那么p就可以理解为指向二维数组a的首地址。
你把二维数组里面的每一整行看做一个元素,即把二维数组按照一维数组去理解,
则*p指向二维数组的第一行。
则**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)就是第二行的首地址,其他同上。

温馨提示:答案为网友推荐,仅供参考
相似回答