我是編程和學習數組中指針的新手。我現在有點困惑。看看下面的程序:指向數組的指針和指向指針的指針之間有什麼區別?
#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