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