求問大神,指標為什麼a 1 2 出錯a i 表示第i行首地址,為什麼加了列以後卻報錯

2021-04-21 23:04:12 字數 3860 閱讀 6723

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米。想問問各位大神...