求助c語言二維陣列的指標及首位址問題

時間 2021-12-18 21:57:14

1樓:匿名使用者

你可以把它當成乙個元素為陣列的一維陣列就容易明白了,陣列本就是在記憶體中申請一塊空間然後用乙個指標指向首位址罷了,arr[i]==*arr+i。

2樓:

c的二維陣列的實現嚴格說有兩種

int i,j;

char arr[a][b];

那麼arr[i][j]與*(arr+i*b+j)沒有區別,i,j為有符號數哦

另一種實現比較好理解,不過我的gcc貌似不是這種實現,沒細研究過那就是arr[i][j]與*(*(arr+i)+j)沒有區別相比而言前一種效率,後一種靈活,你所說的應該是後一種實現,不知你看明白沒

3樓:匿名使用者

若arr是一維陣列名,我們知道*arr就是arr[0],就是*(arr+0)。因為arr是陣列的首位址,*arr就是取首位址所指元素,就是陣列的第乙個元素。

同樣的道理,arr是二維陣列名時,*arr也是取arr的第乙個元素,但是此時arr所指的元素是乙個一維陣列,所以,實際上arr所指元素是一維陣列的首位址。

就按arr[3][4]這個例子來看:3行4列陣列arr可以理解為arr[0],arr[1],arr[2]這三個一維陣列(陣列含有4個元素)構成的二維陣列,*arr就是arr[0],而arr[0]就是第0行的首位址,也就是第乙個陣列的首位址。*(arr+i)就是arr[i],就是第i行的首位址。

如果現在定義arr是字元型陣列,輸出*arr(也就是第一行的首位址)為0000,再輸出*(arr+1)就是0004,而不是0001,就可以說明arr是指向一維陣列的指標。

希望對你又幫助。

c語言二維陣列指標問題

4樓:匿名使用者

選擇a先輸出a[0][0]

然後輸出a[0][1]

5樓:雨諾與諾

選a,23,當i=0時,執行aa=*p+1;這邊先計算*p,就是a=2,2+1=3,所以a=3,輸出*p,即a的2,然後i=1,執行p++;輸出p,這次p相當於a,所以是3,所以結果是a。

6樓:匿名使用者

什麼問題,說清楚,我是專家

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

7樓:匿名使用者

#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)

8樓:匿名使用者

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

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

就知道了。

9樓:匿名使用者

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

10樓:貴藹堂馨蓉

你說要放到另外乙個陣列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;}

有問題歡迎**……

11樓:匿名使用者

#include

int main()

;int (*p)[4];

p=a;

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

return 0;

}//你沒有理

解多維陣列a的意思

求助:c語言二維陣列指標問題

12樓:

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

13樓:

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

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

c++二維陣列名指的是陣列的首位址嗎? 40

14樓:祿學校寄藍

是的,你可以試試看,

比如int

arr[4][4]=;

cout<<(arr

==&arr[0][0]);

//比較一下陣列名和陣列第乙個元素位址的值比較一下,看是不是相等

15樓:匿名使用者

陣列名所代表的資料型別是指標常量,二維陣列就是指標的指標——二重指標,二重指標所存的內容就是一重指標的位址。所以二維陣列代表的是二重指標常量,所儲存的內容是「一重指標們」的首位址即第乙個一重指標的位址

16樓:匿名使用者

是的,比如二維陣列a[m][n],陣列名a是陣列的首位址,它相當於a[0],也就是第一行的首位址,主意在二維陣列中a[0] a[1]...都是位址

17樓:匿名使用者

可以這麼用,但是多維陣列理解起來要麻煩一些

18樓:一生何求

答:二維陣列名是陣列的首位址

1、眾所周知一維陣列名代表陣列的首位址

2、那麼二維陣列名是否代表二維陣列的首位址呢?答案是肯定的,因為二維陣列的本質是一維陣列,它在記憶體中的儲存也是按照一維陣列的方式儲存的。所以陣列名始終代表陣列的首位址。

3、我們可以程式設計取位址確認是否正確.答案輸出yes。

int main()

如果c++;cout<<"yes"<

return 0;}

19樓:匿名使用者

不是,你可以用指標的形式

c語言求助!知道陣列首位址怎麼求出陣列元素位址?

20樓:匿名使用者

這與具體資料的型別密切相關。

設陣列的資料型別為,則每個元素的所佔的位元組數為size = sizeof(),那麼,當陣列首位址為0x12ff40時,元素a[2][3]的存放位址為2*size + 3。

21樓:智者總要千慮

單維陣列名就是首位址,多維陣列名就是第1維的首位址,因此取首位址,可以把陣列名賦給對應的指標變數,或取索引為0的首個元素位址賦給對應的指標變數。舉例:

單維 int arr[10]; int * p =arr; 或 int * p =&arr[0];

二維 int arr[10][10]; int (*p)[10] =arr; 或int (*p)[10] = &arr[0];// 取第一維位址

int arr[10][10]; int * p= & arr[0][0]; // 取多維中的首個元素

c語言的二維陣列位址問題

22樓:匿名使用者

答:二維陣列a[3][4]中,a[1]+1是陣列a[1]的第2個元素的位址,a[0]+4是陣列a[0]的第5個元素的位址,但a[0]只有4個元素,所以a[0]+4就是a[1]首元素的位址,因此這是兩個不同的位址。

另外,也可以將二維陣列a[3][4]看成一維陣列a[12],那麼原來的a[1]+1就是一維陣列的a[5]的位址,而原來的a[0]+4是一維陣列的a[4]的位址,由此可見,這是兩個不同的位址。

c語言二維陣列指標,C語言二維陣列指標

問題的關鍵是主函式中的指標p的值被修改了,因為 在f r 中,r p 在 f 函式中,s t 相當與 p t 而 t k 所以 p k.那麼主函式中,p k r k。 八千漢字 include int k 7 void f int s int main 三昧離火 b答案是正確的,因為二維陣列名相當於...

c語言排列二維陣列,c語言 排列二維陣列

這個程式演算法很好,但是你沒有想一下,if j 3 這段中j 3是不夠的,因為它有可能與a 3 0 比較,因為a 3 0 未知而出錯。另外,你第乙個for語句中標點錯了。還有乙個錯誤是你查不出來的原因,大括號少了乙個,自己仔細查一下,也可以使用ue32這個程式查一下括號匹配。建議你使用這個程式來寫源...

C語言問題二維陣列,C語言題目 對二維陣列的正確說明是

include include 這裡假設1行最多100個字元 define maxline 100 int main 開啟檔案,假設在d盤根目錄下 file fp fp fopen d icc1.q7 r if fp null char line maxline 接收檔案資料,以行為單位 int s...

c語言動態二維指標陣列,c語言動態二維指標陣列

對你的問題有點不懂,你是想說元素都是char型變數,如果是,可以這麼做 char array new char m n m和n的值都可以隨意改變 不知道是不是你想要的 維位址,指向二維陣列第0行位址 0開始計數 第1列 0開始計數 優先順序 所以表示式實際是 p 1 乘以 p 1 1 p指向值為 2...

c語言,指標二維陣列

n是個陣列,已經定義成陣列常量了,陣列的元素型別是指標,元素指標的對應的物件型別是字串,即為字元指標。因為n是陣列名,n不能再賦值 n 等價於返回 n然後n n 1 給n賦值報錯 include int main for i 0 i 3 i system pause return 0 雖然有人回答了...