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

時間 2021-08-30 09:32:14

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 裡一維陣列名,是個指標,那二維陣列名呢

如果把陣列名當作引數傳遞給函式時,那麼編譯器將認為傳遞的是指標。在函式中同樣可以操作該指標,訪問陣列元素,不管它是多少維陣列。比如 int iarray 10 void f1 int p1 如果這樣呼叫f1 iarray 那麼p1 0 等於iarray 0 p1 1 等於iarray 1 以此類推 ...

二維陣列與指標,二維陣列a的“列指標”與“行指標”有什麼聯絡

伊旋圭蒙 int m 可以分步驟來理解 m意思是引用這個整型數,m代表指向這個整型數的指標,m代表指向 m的指標,也就是傳說中指向指標的指標 一般情況下形參為指標型別時,可以傳送陣列名作為實參,也即陣列的起始地址,二維陣列的可以看成是多個一維陣列組成的 用這種二維指標是不能操作這種二維陣列的,二維指...

二維陣列名代表什麼

豔陽高照的午後 二維陣列本質上是以陣列作為陣列元素的陣列,即 陣列的陣列 二維陣列定義 型別說明符 陣列名 常量表示式 常量表示式 例如 float a 3 4 b 5 10 定義a為3 4 3行4列 的陣列,b為5 10 5行10列 的陣列。注意,不能寫成 float a 3,4 b 5,10 二...