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