為什麼C語言中(a i) j能表示a

時間 2021-09-11 22:25:31

1樓:蘭才藝寒姮

inta[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]。

2樓:合元武冼未

a是乙個指標,a+i表示a所指位置的下i個記憶體區,a+j同理。

這個程式的功能是:

交換 a+i

和a+j

所指記憶體區的內容,t是中間變數。

就好像你要交換兩瓶飲料,一瓶汽水,一瓶果汁,交換它們,要找乙個空瓶子,這裡,t就是空瓶子

a+i和a+j

就是你要交換的兩瓶飲料,一共要倒三次,你懂了吧!

3樓:包豔戢珧

inta[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來表示。

為什麼c語言中*(a+i)+j能表示a[i][j]的位址

4樓:

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來表示。

5樓:聽不清啊

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]。

6樓:匿名使用者

*(a+0)取出a[0]的值

a[0]的元素又是乙個一維陣列

因此*(a+0)取出的就是這個一維元素的首位址那麼*(a+0)+0表示: 一維陣列a[n]中, a+0陣列元素a[0]的位址

*(a+0)+1表示一維陣列的1號陣列元素的位址

c語言中 二維陣列@a[i][j]的位址為什麼可以表示成*(a+i)+j難道*(a+i)還表示乙個位址的值?求高手詳細解釋

7樓:匿名使用者

依據《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)。

8樓:問號朵朵

表達錯誤,差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)

9樓:陳宗權

a是乙個二維陣列,a[i]表示其中的一行,是個一維陣列,a[i][j]表示一行裡面的乙個元素。

*(a+i)就是a[i],是乙個一維陣列,當然表示乙個位址,表示這個一維陣列裡面的第乙個元素a[i][0]的位址。

10樓:涓涓細流

在這裡,*a[i]是乙個指標變數,它指向含j個元素的一維陣列。

c語言指標*(*(a+i)+j)什麼意思,*(a+i)為什麼是位址啊,a不應該已經是位址了麼,a+i為什麼不是位址

11樓:匿名使用者

沒有上下文,你的「a不應該已經是位址了麼」毫無根據。

「a+i為什麼不是位址」

從這裡的用法來看,a+i就是位址。

你對「位址」「資料」的概念還是一團漿糊啊。位址其實也是資料的一種。

12樓:匿名使用者

其實是可以把*(*(a+i)+j)看出是二維陣列的乙個值:a[i][j]。

*(a+i)看出a[i]這是一維位址,a是二維位址。

對於a+1不好判斷,以陣列解釋不通,以指標又解釋德通,我就不評價了。

13樓:蟹黃_包

看起來像是取乙個叫a的二維陣列第i行第j列的值。

c語言:為什麼&a[i][j]的值是&(a+i)+j,,,求詳解!!!

14樓:海曉飛流婉

這是【取位址】操作。

要想明白為什麼,就一定要搞清楚陣列在記憶體中的分配,也就是一維陣列和二維陣列在記憶體中的分配問題。

首先,我們知道&a[i][j]是取的a[i][j]的位址,它是乙個二維陣列。對二維陣列的記憶體分配,我們可以理解為【先存行,再存列】

也就是說我們可以將int

a[3][4]的儲存看作是先存的一位陣列a[0],a[1]和a[2],而每乙個一維陣列,又是乙個陣列,即a[0]行包括a[0][0],a[0][1],a[0][2],a[0][3]四個!

依次類推。。。。

所以,取位址的時候,您所說的&a[i][j]就是先取i,再取j說的很詳細了,自己動手畫一畫就很明了了

希望可以幫到你o(∩_∩)o

c語言中{t=*(a+i); *(a+i)=*(a+j); *(a+j)=t;}代表什麼意思啊 謝謝了

15樓:匿名使用者

a是乙個指標,a+i表示a所指位置的下i個記憶體區,a+j同理。這個程式的功能是: 交換 a+i 和 a+j 所指記憶體內區的內容,

容t是中間變數。 就好像你要交換兩瓶飲料,一瓶汽水,一瓶果汁,交換它們,要找乙個空瓶子,這裡,t就是空瓶子 a+i 和 a+j 就是你要交換的兩瓶飲料,一共要倒三次,你懂了吧!

16樓:匿名使用者

交換資料。交換(a+i)所指的元素和(a+j)所指的元素的值,用的是「水桶演算法」。

17樓:匿名使用者

通過中間變數t,交換變數i和j 的值

c語言中*(a[0]+i*n+j)表示什麼意思?等價於a[i][j]嗎?

18樓:匿名使用者

就是將陣列a的首位址加上後面的偏移。

如果這個陣列的每個元素都是乙個位元組,並且第一維的長度是n,那麼與a[i][j]等價。

在二維陣列中為什麼 *(a+i)+j 代表的是位址而不是值元素?

19樓:廨嶔昚

可以這麼說吧, 在二維陣列中,陣列名a指向二維陣列的第一行,就是&a[0]. a+i就是代表第i行位址,即&a[i]. 而*(a + i)是求第i行首元素的值,就是a[i].

這時指標從指向行元素轉為指向列元素.*(a + i)+j就是a[i]+j,是a[i][j]的位址. *(*(a + i)+j)是a[i][j]的值.

*(*(a+i)+j)中*(a+i)+j 代表什麼意思? // 為啥最外面還要*求值呢

20樓:匿名使用者

*(a+i)+j代表的是第 i行,j列的那個元素,這個沒有問題吧。

而那個元素是指標。不是值,所以再加*取值。 這和普通的 *p=a;乙個意思。

主要原因是陣列裡面放的全部都是指標,你可以看你定義時候的宣告就知道了。

21樓:匿名使用者

給你乙個形象的例子,假設有個一維陣列a,

a代表陣列a的首位址,也就是&a對吧,*a為第乙個元素的值,*a+1為第二個元素的值,也就是*(a+1);

現在是二維陣列b

*(b+i)其實就是*b+i對吧,表示陣列b的第i行位址,沒有問題吧?*(b+i)+j表示第i行位址又便宜了j個單元,也就是陣列b的第i行第j列元素的位址,這裡沒有問題吧?再加個*號,*(*(b+i)+j)就是第i行第j列元素的值。

記住一點一維陣列要獲取元素的值,必然有1個*號,二維陣列要獲取元素的值,必然有2個*號。

22樓:匿名使用者

這是哪種語言的程式啊?

C語言中,如何表示變數的n次方,C語言中,如何表示一個變數的n次方?

圭仁丘妍 c語言中計算一個數的n次方可以用庫函式pow來實現。函式原型 double pow double x,double y 如下 include include intmain 注 使用pow函式時,需要將標頭檔案 include包含進原始檔中。擴充套件資料 其他方法表示一個數的n次方 inc...

C語言關於除號,c語言中除號怎樣表示

c語言中的除號是 用的int,float型別分別做除數 1 int int毫無疑問,結果為int型,如1 2,結果為02 int float結果仍為0 3 float int結果為0.5000004 float float結果為0.500000擴充套件資料c語言 不用除號的兩數除 include v...

c語言中 E表示什麼 急急急!!!!

c語言中數e 指數e 可以用exp 函式表示。函式原型 double exp double x 功。能 計算e x的值返回。值 計算結果。舉例 double x y y exp x y的值就是e 注 使用exp函式時,需要將標頭檔案 include 新增進原始檔中。樓上是自動答題機的,不要理他。我來...