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