1樓:匿名使用者
在c語言中,二者是相同的地址值。所以可以說a=*a.
二維陣列a定義為a[i][j]時,代表一組資料,有i行j列,共計i*j的元素。
這組資料在記憶體中是連續存放的。而在c語言的使用中,a是二維陣列的首地址。*a也就是a[0],是二維陣列第一行的首地址。
所以,二者是相同的地址值,即資料a[0][0]的地址值。
也就是說,從值上,a,*a, a[0],&a[0][0]都是相同的值。
當時,說a=*a也並不是完全正確的,從型別上,a等同於二維指標,而*a等同於一維指標。二者型別並不相同,只是在一定條件下可以轉換。
2樓:匿名使用者
我理解問題中的這個=樓主是指相等,而且是數值上相等。這是肯定的。*a實際是*(a+0)+0,也即是a[0]+0這個地址,和a一樣,其數值也是這個二維陣列的首地址。
但是二者含義可不同,不能直接相互賦值。a是行指標,即a是一個大小為i的陣列,其元素也是陣列,大小為j。*a由上面的解釋,其實質是個列指標,指向a的第一個元素(大小為j的陣列)的第0個元素。
3樓:匿名使用者
#include "stdio.h"
main()
} 正確的寫法應該是上面這樣的。
這裡涉及到2個問題:
1.陣列宣告的時候a[9]就是有9個元素的陣列,a[10]就是有10和元素的陣列
2.陣列賦值的時候第一個元素的下標是從0開始的,即a[0],最後一個下標是宣告時的數字-1,如:宣告時:a[9],最後一個元素是a[8]。a[9]是超範圍的。
4樓:
陣列名a表示二維陣列的首地址,*a就好比第一行的地址值a[0],a[0]表示&a[0][0]....
5樓:匿名使用者
二維陣列的指標比較特別,* 的作用是將行指標轉換成列指標,陣列名a是指向第一行的指標,*a則是指向第一行第一列的指標,根本含義上市不一樣的,但是值都是a【0】【0】的地址
c語言中二維陣列a[i][j]中,a+i=*(a+i)=a[i]=&a[i]是怎麼理解的.
6樓:理科女
a+i=*(a+i)=a[i]=&a[i]&a[i] 和a+i是獲取i行陣列的首地址a[i] 和*(a+i)是訪問第i行的陣列望採納!!
7樓:暴躁內酷
樓主 這幾個不是相等的 其中a+i和&a[i]都是表示的記憶體地址 而*(a+i)和a[i]是取值。
8樓:匿名使用者
首先,a表示地址,a+i 表示相對於地址a偏移 i 個單位的地址,即,a + i 也是地址
a[i]表示第幾行的地址
&a[i]表示對第i行的地址再取地址。
9樓:匿名使用者
&a[i] 和a+i是獲取i行陣列的首地址
c語言的二維陣列中a[i]+j這個j為什麼表示的是位元組數?
10樓:匿名使用者
指標變數的增減是按地址進行的,a[i] + j應該表示的是a[i] + j*sizeof(....)。
11樓:金色潛鳥
如果有二bai維陣列
short int a[4][5];
那麼 a[i] 就不是du下標變數,而是地址:zhi&a[i][0]
所以 a[i]+j 是 a[i] 這個dao
單元所在地專 的 下面 的 第 j 個 元素的 地址
a[i]+j 等於屬加的這項東西 就是 j乘2 個 位元組。
老譚的書很老了。現在的 int 預設 是 4 位元組。
int a[4][5]; a[i]+j 是加的這項東西 就是 j乘4 個 位元組
char a[4][5]; a[i]+j 是加的這項東西 就是 j乘1 個 位元組
double a[4][5]; a[i]+j 是加的這項東西 就是 j乘8 個 位元組
c語言中,二維陣列的&a[i]+j和a[i]+j 一樣嗎?
12樓:匿名使用者
void main()
bai;
int i=1,j=4;
if(a[i]+j==&(a[i][j]))printf("a[i]+j==&(a[i][j])\n");
else printf("a[i]+j!du=&(a[i][j])\n");
}這些問題自
zhi己上
dao機試一下內
就行容了
13樓:匿名使用者
一樣的 兩個都是代表 a[i][j]的地址
14樓:匿名使用者
a[i][j]的地址 因為&a[i]是a陣列的首地址是第一行第一列 再加j就是第一行第j列了
應該是這樣的 c預言是我3年前學的 都忘了
c語言中 二維陣列@a[i][j]的地址為什麼可以表示成*(a+i)+j難道*(a+i)還表示一個地址的值?求高手詳細解釋
15樓:匿名使用者
依據《c語言深度剖析》「多維陣列與多級指標」章節 原文如下:
以陣列下標的方式來訪問其中的某個元素:a[i][j]。編譯器總是將二維陣列看成是一個
一維陣列,而一維陣列的每一個元素又都是一個陣列。a[3]這個一維陣列的三個元素分別為:
a[0],a[1],a[2]。每個元素的大小為 sizeof(a[0]),即 sizof(char)*4。
由此可以計算出 a[0],a[1],a[2]
三個元素的首地址分別為& a[0],& a[0]+ 1*sizof(char)*4,& a[0]+ 2*sizof(char)*4。亦即 a[i]
的首地址為& a[0]+ i*sizof(char)*4。這時候再考慮 a[i]裡面的內容。就本例而言,a[i]內有 4
個 char 型別的元素,其每個元素的首地址分別為&a[i],&a[i]+1*sizof(char),
即 a[i][j]的首地址為&a[i]+j*sizof(char)。再把&a[i]
的值用 a 表示,得到 a[i][j]元素的首地址為:a+ i*sizof(char)*4+ j*sizof(char)。同樣,可以換
算成以指標的形式表示:*(*(a+i)+j)。
16樓:問號朵朵
表達錯誤,差1錯誤:
a[i][j]的地址應該表示為:*(a+i-1)+j-1
例:int a[3][4]; 則:
*(a):表示第一行的首地址,即:(*(a))[0],表示第一行第一個元素地址,值為:*((*(a))[0])。
*(a+1):表示第二行的首地址,即:(*(a+1))[0],表示第二行第一個元素地址,值為:*((*(a+1))[0])。
*(a+2):表示第三行的首地址,即:(*(a+2))[0],表示第三行第一個元素地址,值為:*((*(a+2))[0])。
*(a+3-1)+4-1:表示最後一個元素的地址。它的值是:*(*(a+3-1)+4-1)
17樓:陳宗權
a是一個二維陣列,a[i]表示其中的一行,是個一維陣列,a[i][j]表示一行裡面的一個元素。
*(a+i)就是a[i],是一個一維陣列,當然表示一個地址,表示這個一維陣列裡面的第一個元素a[i][0]的地址。
18樓:涓涓細流
在這裡,*a[i]是一個指標變數,它指向含j個元素的一維陣列。
c語言中二維陣列*(a+i)的意義
19樓:
*(a+i)——二維陣列第i行(從0起算)第一個元素的地址。
20樓:匿名使用者
所謂*(a+i)等價於a[i],而a[i]是一個陣列名,那麼a[i] = &a[i][0],陣列名等與首元素的地址
為什麼c語言中二維陣列的陣列名a和*a表示的是同一個值?
21樓:匿名使用者
當定義二維陣列a[m][n]時,陣列名可以認為是二維指標,其指向二維陣列的首地址。
於是a的值就是首地址的值。
而*a,就是a[0],a[0]是第一行的標記,代表第一行的首地址。
在二維陣列中,所有元素都是緊密排列的,這樣整個陣列的首地址,第一行的首地址,和第一個元素的首地址,即a, a[0], &a[0][0] 都是相同的。
於是a和*a的值是相同的。
為什麼c語言中*(a+i)+j能表示a[i][j]的地址
22樓:
int a[3][4]; //假設定義一個3行4列的二維陣列,所謂二維陣列就是陣列的陣列
a[0]、a[1]、a[2]是陣列a的元素,而這個元素是陣列,而不是我們通常認為的基本資料型別的資料
所以*(a+i)就是獲取陣列a中第i個元素,等價於a[i],而a[i]本身又是一個包含有4個int型數值的陣列,a[i]是這個一維陣列的陣列名,我們知道陣列名的本質是一個地址,是陣列首元素地址,所以
*(a+i)+j就是表示下表第i行的第j個元素的地址了。所以,
*(a+i)+j表示的含義是元素a[i][j]的地址,也可以用a[i]+j來表示。
23樓:聽不清啊
int a[2][3]=;
printf("%d ",*(*(a+1)+2));
以上的引用能夠輸出60
因為a是二維陣列名,所以它是指向指標的指標(二級指標)。
*(a+1)就是a[1],它是一個一維陣列,也是一維陣列的首地址(指向一維陣列首元素的指標)。*(a+1)+2就是a[1][2]的地址,*(*(a+1)+2)就是a[1][2]。
24樓:匿名使用者
*(a+0)取出a[0]的值
a[0]的元素又是一個一維陣列
因此*(a+0)取出的就是這個一維元素的首地址那麼*(a+0)+0表示: 一維陣列a[n]中, a+0陣列元素a[0]的地址
*(a+0)+1表示一維陣列的1號陣列元素的地址
C語言中關於二維陣列的問題,c語言關於定義二維陣列的問題
float a 5 是定義了一個指向陣列的指標,如果要把它當成二維陣列的話,相當於列數為5,行數可以動態分配。如 float a 5 int n 2 定義行數為2 a new float n 5 int sum 0 for int i 0 i 對於你定義的這個陣列,它表示有5個float 型別的指標...
c二維陣列傳遞問題,C語言怎麼以二維陣列作為引數傳遞的問題
你這裡nn裡面確實是二維陣列,char al 10 是說al是一個一維維度為10的二維陣列指標變數。因此和你的ne陣列是對應的,傳參是沒問題的。錯誤在於 1.你的函式呼叫有問題 nn ne 2.你給陣列賦值,al 0 asd 這種使用,是僅在陣列初始化的時候被允許的。如果要實現這個字串放到陣列,可以...
C語言中有什麼函式能求二維陣列的一維陣列的長度
你要了bai解二維陣列其實是 du模擬一維陣列zhi 的,因為計算機的儲存機制是一維dao的內.charstr 20 50 這樣其實是定義了20組容一維陣列,其中每組又含有50個char型變數的陣列.你用strlen str 是不行的.這是求一個字串有多少個字元的.應該用sizeof str 這樣就...