C語言中陣列指標關於p a,p a等問題

時間 2021-09-11 22:25:28

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...