關於c語言二維陣列陣列名與指標的問題

2021-08-19 16:29:19 字數 5125 閱讀 2698

1樓:匿名使用者

先說些這個2維陣列:int arr[3][4]

可以理解為乙個3行四列的矩陣,那麼第一維arr[0],arr[1],arr[2]中存的分別是對應行的位址,也就是說arr[0]存的是乙個「大小為4的整形陣列位址」

這樣的話就好理解了,arr存的位址值其實與arr[0]本質上是相同的。都是這個連續空間的開始位址。

第乙個問題,arr是個位址變數,因此它本身是個位址,而它存的其實也是個位址。

第二個問題,&arr也是首位址,不過叫「2維陣列的首位址」,卻別的話就是它有個寬度,舉個例子:「&arr+1」其實相當於「&arr[sizeof(a)+1]」這裡arr大小為7,那麼&arr+1就是從二維陣列首位址開始後的第8個整形變數空間的位址。當然從位址值的角度看它們是沒有什麼卻別的,區別在於「指標寬度」

不知道你明白沒?

2樓:匿名使用者

int (*p)[6] = arr;//定義乙個陣列指標指向二維陣列的首位址arr

這行奇葩的**就不做點評了,在如果在c++的編譯器裡編譯器絕對打臉。

陣列名代表的指標其實是降了一級的指標,比如你寫int p[10],陣列名p並不是指向十個int元素,而是指向第乙個int元素,如果希望得到int [10]的指標應該使用&p;int arr[3][4]也是如此,arr並不是指向arr[3][4],而是指向第乙個int [4]陣列,要指向整個int [3][4]使用&arr。

他們的位址都是一樣的,都是指向第乙個元素的位址,但是他們的指標指向的物件長度是不一樣的。

c語言中二維陣列名能否直接賦給指標變數

3樓:匿名使用者

二維陣列的指標與指標的指標是不一樣的。

所以int **ppr;

int fool[2][3];

ppr = fool;

這樣是不行的。

二維數回組的指標必須

答限定第一維的大小。

所以:int (*ppr)[3];

ppr = fool;

這樣才可以。

4樓:匿名使用者

可以,但所宣告的指標型別是指向指標的指標如:

int a[3][3];

int** array_ptr=a;

5樓:匿名使用者

可以,二維陣列名本身就是表示乙個陣列的首位址。

6樓:手機使用者

可以,陣列名是陣列首元素的位址

7樓:孓圊

可以,例如a,*p=a

為什麼c語言中二維陣列的陣列名a和*a表示的是同乙個值?

8樓:匿名使用者

當定義二維陣列a[m][n]時,陣列名可以認為是二維指標,其指向二維陣列的首位址。

於是a的值就是首位址的值。

而*a,就是a[0],a[0]是第一行的標記,代表第一行的首位址。

在二維陣列中,所有元素都是緊密排列的,這樣整個陣列的首位址,第一行的首位址,和第乙個元素的首位址,即a, a[0], &a[0][0] 都是相同的。

於是a和*a的值是相同的。

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

9樓:匿名使用者

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

10樓:匿名使用者

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

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

就知道了。

11樓:匿名使用者

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

12樓:貴藹堂馨蓉

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

有問題歡迎**……

13樓:匿名使用者

#include

int main()

;int (*p)[4];

p=a;

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

return 0;

}//你沒有理

解多維陣列a的意思

c語言:關於二維陣列的指標問題, 對於一維陣列來說,陣列a[i]的陣列名a就是陣列首元素的首位址,

14樓:匿名使用者

二維陣列,就是指數組元素為 陣列 的 一維陣列,就按一維陣列的方式版去理解就可以了。

如:權int a[5][10] ; 可以看成 type b[5] ; type的型別為int [10] ;

陣列a[0],a[1],a[2]。。。都是一維陣列,也就是一維陣列的首位址

對應的指標方式為:*(a+0), *(a+1),*(a+2)....

如有問題,再追問!

15樓:匿名使用者

首先二維數du組是不是可zhi以看成幾個一維陣列dao的結合

比如a[3][4]是不是代表3個一維專陣列,一維陣列的大小是4那麼屬第乙個陣列的陣列名是a[0],然後a[0]這個陣列裡面有四個元素分別為,第二個陣列名是a[1],以此類推

二維陣列相當於也是乙個陣列,裡面裝的都是一位陣列a[3] = ,這裡的a[0]-a[3]是三個一維陣列,那麼*(a+i)就是a[i],a[i]就是一維陣列名,陣列名是不是就是位址,那麼*(a+i)就是位址,*(a+i)+j 是不是等價於a[i]+j ,a[i]我們剛才說了是一維陣列名,也就是位址,乙個位址加上j是不是還是位址呢?*(a+i)+j = &a[i][j]的

關於c語言 把陣列名賦予指標的問題。

16樓:

就是指向乙個位址。陣列第乙個元素的位址就是陣列位址。

17樓:gta小雞

你的理解從本質來

上就有問題自

int *p1=a不能通過編譯,因為a是二維陣列指標,型別是int (*)[3],無法轉換到int*型。必須用int (*p1)[3]=a或者int *p1=a[0]才可以。同理int p2=a[0]無法通過編譯,因為a[0]是乙個int指標而不是乙個int元素,必須用int *p2=a[0]才可以。

a代表二維陣列,它指向的是一維陣列a[0]的位址,該位址恰好和a[0][0]的位址相等,但型別上有著本質區別,a是乙個是int*陣列的指標而a[0]是乙個int*元素的指標。a[0]代表的是二維陣列a的第一行,是乙個一維陣列,指標a[0]是int*型,它指向該一維陣列的首元,即a[0][0]的位址。

c語言中的二維陣列名是乙個二重指標嗎?

18樓:

應該不是的,簡單來說,陣列名,不管是多少維度的都是採用名稱**表相應的存放位址。雖然二重指標也是存放資料的位址但是其是間接的存放。就打個比方,二重指標就如乙個廠家有好多貨要賣出去。

而自己又沒有銷售渠道,只好通過**商來提貨,通過分銷商來賣給消費者;二維陣列就如廠家有貨而且自己有渠道直接銷往消費者。 不知這樣說是否容易理解。

19樓:瀚漠

不是二級指標p也可以解釋為指標的指標,即p內儲存的值實際上還是乙個指標,計算:

*p的值實際上是乙個指標值,那麼 *(*p)即二級指標指向的最終值

對於二維陣列a[2][2],a也是乙個位址,並且這個值也等於a[0],也等於a[0[0]的位址,即&a[0][0],由此看來對a取位址的值是乙個變數值(不是指標),所以a並不是乙個二級指標,最多算乙個一級指標。

20樓:匿名使用者

1、二維陣列名不是二級指標,它只是乙個比較特殊的常量指標。包括三維,四維,乃至n維陣列也是如此。只要是陣列,那麼它就是乙個普通的常量指標。

2、二級指標p也可以解釋為指標的指標,即p內儲存的值實際上還是乙個指標,計算:

*p的值實際上是乙個指標值,那麼 *(*p)即二級指標指向的最終值。

對於二維陣列a[2][2],a也是乙個位址,並且這個值也等於a[0],也等於a[0[0]的位址,即&a[0][0],由此看來對a取位址的值是乙個變數值(不是指標),所以a並不是乙個二級指標,最多算乙個一級指標。

c語言指標與二維陣列的使用錯誤

21樓:

好好的二維陣列,c也提供了二維陣列的操作辦法,幹嘛要降成一維陣列操作?舍簡求繁降一維當然也行,可是用的是二維陣列名作指標,並未強製成一維陣列指標,當然那些類似i*n+j這樣計算下標的演算法都注定要失敗。下面是我給你改過的,改得較多,有標記,所以就不細說。

你對照看,可續問。

#include "stdio.h"

#define n 100

void  transpose(int (*p)[n],int x){//有改

int i,j,temp;

for(i=0;i

執行樣例:

關於c語言二維陣列的問題,C語言中二維陣列的定義問題

a是乙個一維陣列,陣列裡的值是指標,指向的還是一維陣列。即等價於,int x 2 2,0 int y 2 4,8 int a 2 x,y 我想你應該知道答案了。c語言中二維陣列的定義問題 正確寫法如下 char fd jgf1 maxitemlen 1 說明 把null去掉 1.二維陣列的第乙個維度...

c中,陣列名跟指標有區別嗎,C語言中陣列名和指標的區別

其實可以認為陣列名就是乙個不可更改的常量指標。但是 嚴格來說,二者有一定區別,比如sizeof a a為陣列名的時候,算出來是a這個陣列所佔位元組數,但是如果a是指標,不管指向什麼,結果都是乙個int的位元組數 取決於特定機器 因而,有人認為陣列名是乙個可以退化為常量指標的型別,這種退化在陣列名作為...

C語言二維陣列問題

a代表陣列的首位址,a 0 代表這個二維陣列第一行的首位址,雖然這兩個位址值是一樣的 int p a表示p是指向int型別的指標a是乙個二維陣列,其指標指向的是一維陣列,一維陣列才指向的是int,因此得用兩重指標表示 int p a int p 4 a 定義的是乙個有4個元素的int陣列的指標,而a...