我是编程和学习数组中指针的新手。我现在有点困惑。看看下面的程序:指向数组的指针和指向指针的指针之间有什么区别?
#include <stdio.h>
int fun();
int main()
{
int num[3][3]={23,32,478,55,0,56,25,13, 80};
printf("%d\n",*(*(num+0)+1));
fun(num);
printf("%d\n", *(*(num+0)+1));
*(*(num+0)+0)=23;
printf("%d\n",*(*(num+0)));
return 0;
}
int fun(*p) // Compilation error
{
*(p+0)=0;
return 0;
}
这是我的老师的笔记写的程序。在main()
函数中,在printf()
函数中,解引用运算符被使用了两次,因为num
是指向数组的指针,因此首次解除引用运算符将指向int
,然后第二个指针指向该值。
我的问题是,当我将数组名称作为参数传递给函数fun()
时,为什么使用*p
;为什么不**p
as num
是一个指向数组的指针?
第二件事为什么*(p+0)
用于更改数组的第零个元素的值;为什么不使用*(*(p+0)+0)=0
中的main()
函数*(*(num+0)+0)
被用来改变零元素的值?
整件事对我来说非常混乱,但无论如何我必须理解它。我已经搜索了这个,并发现指针指向数组和指针指针之间有区别,但我不明白。
多维数组是* flat *。清除有关如何实施的混淆。 – 2014-12-03 12:09:48
你会从这个问题的答案得到答案http://stackoverflow.com/questions/14100240/2-dim-array-and-double-pointer?lq = 1 – 999k 2014-12-03 12:18:11
难道你不会得到编译错误,原型/功能不匹配?为什么你问+ 0 + 0而不是+0?为什么在代码中添加静态0? – dhein 2014-12-03 12:42:35