1樓:匿名使用者
前提是來a是一個二維陣列吧
a+i 表示的是源表示第i行首地址,
*(a+i)表示第i行首元素的地址
在 &*(a+i) 也就是 &(* (a+i) ) 中,&和* 相當於相互抵消了。
而 &(*(a+1)+2)出錯,是因為這個類推並不對應。要對應的話,見下圖
int i=1,j,x,y,z,w;
char a[3][80], *p,(*pp)[80];
pp = a+i;
pp = &(*(a+i));
p = *(a+1)+2;
p = &(*(*(a+1)+2));
上面的表示式都是沒有問題的;
2樓:匿名使用者
因為*(a+1)+2的結果是一個常量,不能再用地址去指向。
*(*(a+i)+j)是不是表示第i+1行第j+1列個元素的值?
3樓:匿名使用者
反過來思考一下:
如果 *(a+i) 是第i行的行首元素,那麼第i行的第二個元素應該怎麼表示呢?
a+i 和 *(a+i)雖然值相等,但是他們的意義是不同的a+i 是陣列指標的指標,p=a+i;p++;跳過一行*(a+i)是指標,p=*(a+i);p++;跳過一列
4樓:匿名使用者
假設int a[3]=,b;
b=*(*(a+1)+1);
a是個二維陣列,表示二維陣列a的地址,a[0]、a[1]可看作是2個一維陣列,分別是一維陣列a[0]、a[1]的地址,a[0]的值為,a[1]的值為,也就是a[0][0]的值為1,a[1][0]的值為4,依此類推
a+1是個地址,是二維陣列a的第二個元素的地址,也就是a[1]的地址
*(a+1)是個值,但也是個地址,其值就是二維陣列a的第二個元素的值,也就是a[1]的值,a[1]是個地址,也就是一維陣列a[1]的地址
因此a+1和*(a+1)其實都是a[1]的地址值,前者是二維陣列的地址,後者是二維陣列的值,也即一維陣列的地址
*(a+1)+1也就是a[1]+1,即一維陣列a[1]的第二個元素,即a[1][1]的地址
*(*(a+1)+1)就是a[1][1]的值,也就是5
a、a[0]、*a都是a[0]的地址,a+1、a[1]、*(a+1)都是a[1]的地址,可用以下語句驗證
printf("%d,%d,%d",a,a[0],*a);
printf("%d,%d,%d",a+1,a[1],*(a+1));
c語言中 二維陣列@a[i][j]的地址為什麼可以表示成*(a+i)+j難道*(a+i)還表示一個地址的值?求高手詳細解釋
5樓:匿名使用者
依據《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)。
6樓:問號朵朵
表達錯誤,差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)
7樓:陳宗權
a是一個二維陣列,a[i]表示其中的一行,是個一維陣列,a[i][j]表示一行裡面的一個元素。
*(a+i)就是a[i],是一個一維陣列,當然表示一個地址,表示這個一維陣列裡面的第一個元素a[i][0]的地址。
8樓:涓涓細流
在這裡,*a[i]是一個指標變數,它指向含j個元素的一維陣列。
ans[i+j+1] += (a[i]-48)*(b[j]-48);這裡的減48是什麼意思?
9樓:naruto的海角
a,b裡面儲存的都是字母,你看一下ascii表,
字元」a」對應的是97,97-48=49,直接對應的是數值1,所以減48起到的是一種將原字母編碼的一種過程
10樓:匿名使用者
也可以寫成這樣,便於理解:ans[i+j+1]+=(a[i]-'0')*(b[j]-'0');
對於數字字元,減去0對應的ascii碼可獲取對應的數字。字元'0'的ascii碼為48
來大神!!c語言中為什麼a[i] =b[i]和i[a] = i[b]的結果一樣
11樓:匿名使用者
(a[i]=b[i])整個結果的值
為左邊的值a[i]。 是由b[i]賦值的。
同樣(i[a] = i[b])整個回結果的答值為左邊的值i[a]。 是由i[b]賦值的。
說這兩個結果相等,就是說b[i] 和i[b]相等。
你這段話哪來的,若有**可以全發出來。
若是a[i]==b[i] 其整個結果是1.同樣i[a] = i[b]整個結果也是1.
這是判斷語句,結果只能是0或者非0
12樓:劉文正粉絲
不知道你學過
指標沒.如果學過,一個表示式你就懂了:
a[i] == *(a+i);
b[i] == *(b+i);
如果沒學過指標,我給你簡單解釋內幾句:陣列名是陣列第一個容元素的地址.再加i,就是加
sizeof(型別)*i. 而星號(*)是指:它後面的指標變數指向的變數.如果p指向i,*p == i.如果*p = 1,i就是1.
同理i[a] == *(i+a);
i[b] == *(i+b);
//程式演示:
# include
int main(viod)
13樓:匿名使用者
因為bai你用的是賦值du號 」=「 號
而不是用zhi來判斷是
否相等的dao 「==」 號
所以,每次版賦值只權要沒有越界或者型別等其他因素導致的錯誤,你的每次賦值都將成功,所以返回永遠為 true,所以 呵呵.... 每次都一樣!!!
14樓:wjl捷哥
什麼意思,同段程式中這兩句一樣?
求問大神這是什麼植物,求問大神,這是什麼花?
富貴竹。無土水培的,可以淨化室內空氣,建議多養幾支。你既然養了它,卻也不知道它是什麼,這是一種竹子,不過現在人們都叫它作富貴竹,其實寓意還是不錯的,這種竹子挺好養的,把它泡在水裡就行。富貴竹。龍舌蘭科龍血樹屬多年生常綠小喬木。喜陰溼環境,耐澇,原產熱帶地區。是一種觀葉植物 富貴竹,富貴竹為多年生常綠...
求問大神,這是什麼花,大神!這是什麼花?線上等
粉蝶花是一年生草本花卉,屬水葉科粉蝶花屬。花瓣5枚,花徑1 3公分左右,一般常見的花色為澄青,尚有白花且中心處散佈著小黑點,或是白花且每瓣花瓣外緣尖端處有紫斑,更有花瓣黑色 黑色部分會有所變化,從濃紫至黑色,並非全然黑色 且外緣有白色覆輪的,花色之特別可說是無人出其右。耐寒性強,即使下霜的地區也可越...
求問各位大神,這是什麼魚,想問問各位大神,這是什麼魚?
隆頭魚科 labridae 毛利隆頭魚屬 ophthalmolepis 魚類 下圖為 線紋毛利隆頭魚 ophthalmolepis lineolata 俗稱 白條毛利隆頭魚 分佈於澳洲南部專 靠近印屬度洋 海域,體長可達40釐米,棲息在近海礁石區,常見於鬆散的魚群中。棲息深度為60米。想問問各位大神...