1樓:賽佑平信鵑
問題1:你這種理解是對的;比如陣列int
b[2][2]=;對於int
*p=b[0];那麼p指向的資料就是;同理,*p=b[1];p指向;
問題2:在32位系統中,確實a
和&a傳遞的值都是陣列的首地址(4bytes);但是有個傳遞給什麼型別資料的問題,如果是傳遞給簡單的指標如int
*p;那麼這兩種形式沒有差別;彙編**完全是一樣的;但是你這裡是傳遞給指標陣列int
(*p)[4];就有型別匹配的問題在裡面;這時的p表示的是指標陣列的首地址,而不是一個簡單的變數你要明白;
問題3:依然是行指;(*p)[3]表示的是陣列的第4個元素要注意;
問題4:二維以上陣列的陣列名是沒有任何意義的;比如二維;a[2][4];有意義的首地址是a[0]和a[1];
程式2:明確地告訴你:不能!
注意score是二維陣列;二維陣列的陣列名稱不能像一維那樣代表首地址;如果非得取首地址;那麼是如下的取法:(加*)
inta[2][2]=;
00401028
c745
f001
0000
00mov
dword
ptr[ebp-10h],1
0040102f
c745
f402
0000
00mov
dword
ptr[ebp-0ch],2
00401036
c745
f803
0000
00mov
dword
ptr[ebp-8],3
0040103d
c745
fc04
0000
00mov
dword
ptr[ebp-4],4
18:int
*p=*a;
00401044
8d45
f0lea
eax,[ebp-10h]//第一個資料的地址傳遞給eax
00401047
8945
ecmov
dword
ptr[ebp-14h],eax//eax傳遞給引數*p
2樓:皇甫蘭英曹璧
根據陣列下標記最好,比如說你定義一個a[5]=,那麼a[0]=2,a[1]=3,a[2]=5......
在一個變數前加一個*表示是一個指標變數,他是指向變數地址的指標的,所以要加一個&表示取地址;
這個還是那句話,你只管下標,
int(*p)[2][4];//也要改二維的p=&a;
printf("%d\n",(*p)[0][3]);
&這個表示取地址,而12是個常量
這樣就不能用&,而*score表示一個指標變數
3樓:山仁戴綢
你說的*(p++)h和*p++是等價的
但是這裡的++是先用在加所以結果都是10
要是程式是這樣的
#include
void
main()
,*p;
p=a;
printf("%d\n",*(p++));
printf("%d\n",*(p++));
p=a;
printf("%d\n",*p++);
printf("%d\n",*p++);
}結果就會變成11了
希望採納
C語言中關於指標和陣列命名處的問題
空雪夢見 前者出錯的原因就和 int a 10 a 1 是一個道理。一個是可以往裡面存指標的陣列,一個是指向陣列的一個指標。後者,char month 是宣告 指向陣列的一個指標 的語法這種語法必須指定陣列的大小才能宣告。char month 是宣告 一個可以存指標的陣列 的語法,後面就適用 初始化...
關於c語言中指標賦值的問題,關於C語言中指標賦值的問題
計算天下 你這樣想說明你還沒有真正理解記憶體和指標。int a 表示編譯器隨機取出一個空閒的地址分配給a,不妨設為00000000,長度為sizeof int 不同編譯器可能不同。int p 也表示隨機取出一個空閒的地址分配給p,不妨設為000000f0,長度一般為4個位元組,則這四個位元組現在儲存...
c語言問題,陣列與指標,C語言陣列和指標的問題
char a computer a指向一個常量字串,常量字串是不能修改的,而你的for迴圈內要修改a指向的這個常量字串,自然要出錯 char a computer 這個a就是個普通陣列了,它的內容是可以改動的,就不會出錯了 因為 a是個指標啊 所以應該賦值賦地址!所以 應該 char a compu...