求助 C語言二維陣列指標問題,c語言二維陣列用指標表示的問題

時間 2021-09-11 22:33:35

1樓:

1.對於int **p = a;

p型別和a是不同的。

p是指向乙個指標(指向int型別的量)的指標,a則是指向乙個一維陣列(含2個int元素)的指標。

想要建立相同型別的指標應該用int  (*p)[2]; 才行

3.感覺p跟a就同級吧但型別不同

所以其實int **p=a; 兩側的指標的型別是不相同的,只是a的值賦給p而已

假設a[0][0]位址是0x99

神奇的是對陣列而言,a、a[0]、*a的值是一樣的,都是0x99!

你可能會想這不可能吧

但如果你使用*a操作,你會發現效果就是等價於a[0],不會直接取值(指向陣列的指標的奇怪之處)

此時a的值是0x99

a賦給p的值是0x99

而對p來說就不一樣(p不是指向陣列的指標),*p真的是對那個位址的記憶體取值。

所以即使printf("%d", *p); 提示說型別不合適,但是p存的位址值就是a[0][0]的位址值,又有%d限制讀取資料的長度為int型別,所以可以成功間接取值(但會有警告哦)。

2.用int *p=a; 就更不對了,二者型別差別更大了,都不是乙個層次的了,前者指向乙個int型別,後者指向乙個int型別的陣列。

4.a是指標常量,不能用a++的。指標+1的話就是移動乙個指向物件大小的位置,也就是說

如果a的值是2000,a+1就是2000+2*4(2個元素*4個位元組)=2008

2樓:

int **p = a;這個定義不能通過編譯,應該是int (*p)[2]=a;才對。

a++更是錯誤的。a是陣列名,是常指標,不可++、--操作。

c語言二維陣列用指標表示的問題

3樓:匿名使用者

#include

void main()

;int (*p)[4];

p=a;

printf("%d",*(p)[3]);

}首先你沒有理解int (*p)[4];

他的意思就是含有4個指標的陣列 由於int a[3][4]只有3行,所以*(p)[3]這個地方就越界了

如果*(p)[2]位址中的值就是17 *(p)[1] 就是9 ,*(p)[0]就是1

如果你要列印7 *((p)[0]+3)

4樓:匿名使用者

因為p[3]沒有指向a[0][3],你加條語言

printf("%x\t%x\n", p[3], &(a[0][3]));

就知道了。

5樓:匿名使用者

printf("%d",(*p)[3]);

6樓:貴藹堂馨蓉

你說要放到另外乙個陣列b中,但是沒看到你定義新的陣列,所以我就按我自己的理解做了。

#include

#define

rows

3#define

cols

4double

copy_ptr(double

*tar);//乙個變數就夠了

//rows和cols本來就是define的,全域性intmain(void),,

,};double

*p=source[0];

printf("taget[%d][%d]=",rows,cols);

copy_ptr(p);

printf("\n");

while(1)

{}return0;}

double

copy_ptr(double

*tar)

}//直接輸出了……

return0;}

有問題歡迎**……

7樓:匿名使用者

#include

int main()

;int (*p)[4];

p=a;

printf("%d",*(*p+2));

return 0;

}//你沒有理

解多維陣列a的意思

c語言中關於二維陣列和指標的問題

8樓:

*(p+1)單獨使用時表示的是第 1 行資料,放在表示式中會被轉換為第 1 行資料的首位址,也就是第 1 行第 0

個元素的位址,因為使用整行資料沒有實際的含義,編譯器遇到這種情況都會轉換為指向該行第 0 個元素的指標;就像一維陣列的名字,在定義時或者和

sizeof、& 一起使用時才表示整個陣列,出現在表示式中就會被轉換為指向陣列第 0 個元素的指標

9樓:lzs丶灬

首先p是乙個位址

然後p=a,所以p指向了a這個二維陣列

p+2也是一塊位址指向a[2]

*(p+2)指向a[2][0]

*(p+2)+4指向a[2][4]

你自己理解吧 指標坑爹的一筆

關於C語言二維陣列指標問題

如果是前者的話,每行應該輸出乙個元素才對,如果是後者的話又應該只能輸出每一行的首元素才對呀?正如樓上2位仁兄所言,p 指的是前者 下乙個元素的位址 樓主的疑問似乎是認為,該程式段 每行應該輸出乙個元素才對 這是不對的,語句printf 3d p 是每輪迴圈都要執行的,即按每個數字佔3個int大小列印...

C語言題目(關於二維陣列)關於二維陣列的c語言題目

二維陣列定義的一般形式是 型別說明符 陣列名 常量表示式1 常量表示式2 其中常量表示式1表示第一維下標的長度,常量表示式2 表示第二維下標的長度。int a 3 4 如果 int a m n 是乙個已賦值的陣列,則可以用以下的語句段以矩陣形式列印這個陣列 int i,j for i 0 i 二維陣...

C語言二維陣列程式設計題,C語言二維陣列程式設計題

第一道 include stdio.h define n 4 int main int f1 1,f2 1 for int i 0 i n i int result f1 f2 printf d n result return 0 第二道 include define n 10 int main e...