二維陣列中,a i表示第i行的地址,那為什麼 a i 也表示第i行的地址

2021-03-22 08:17:10 字數 3708 閱讀 1968

1樓:鈄運旺登子

二維陣列每行的首地址分別為a[0],a[1]……a[i],*(a+0)是a[0],*(a+1)是a[1]……*(a+i)是a[i]。a+i是地址,但不代表第i行的首地址a[i]。

2樓:匿名使用者

a+i和*(a+i)的值相同沒錯,但它們的型別不一樣,代表的意義也不一樣。a+i還是2維指標,*(a+i)則是一維指標。編譯器對它們的解析和操作是不一樣的。

指標指向二維陣列,a+i表第i行首地址,為什麼加了個取內容符的*(a+i)還表示第i行首地址

3樓:匿名使用者

書上有解釋啊。對於一位陣列a來說,a[i]和*(a+i)等價,因此對於二維陣列內b來說,b[i]和*(b+i)等容價,但他們的值都是&b[i][o]。也就是說,二維陣列的指標某些表達是從一維陣列演變來的。

別忘了二維陣列是可以看作一個元素為陣列的一維陣列。望採納

4樓:太原綁哥

二維陣列每行的首地址分別為a[0],a[1]……a[i],*(a+0)是a[0],*(a+1)是a[1]……*(a+i)是a[i]。a+i是地址,但不代表第i行的首地址a[i]。

定義 int a[2][2]的二維陣列,a+i表示第i行首地址,*(a+i)表示第i行第0列元素地址,我瞬間就懵逼了

5樓:君上沙夏

a+i表示第i行首地址,*(a+i)表示第i行第0列元素這樣說才是對的。

第i行首地址和第i行di0列元素地址是一個意思。不明白可以追問

二維陣列中*(a+i)是什麼意思

6樓:匿名使用者

在c語言中規定,陣列名代表的是陣列首元素地址。a是二維陣列的陣列名,因此,在二維陣列中*(a+i)表示的是第i+1行0列元素的地址,即a[i][0]的地址。而a+i表示的是第i+1行的首地址。

*(a+i)與a[i]是一樣的地址,為什麼?

7樓:匿名使用者

這麼說吧,*(a+i)與這個地址存的引數等效,*的意思是根據指標這個地址調出這個地址上的值。那麼,說是地址也沒有錯,只能說不是很嚴謹。

8樓:匿名使用者

你內個說法有點錯誤

c++二維陣列指標中

a+i 表示陣列a的第i行第0列元素的地址*(a+i)表示陣列a的第i行第0列元素的值估計你內個是書上印錯了,教科書各種錯,例題**也各種錯,你得自己根據定義去理解,它只是說個大概意思

9樓:匿名使用者

不是的,給*p賦值,並不是直接賦給它數值,而是賦給他一個地址,比如說:*p=&i,那麼就給*p賦給了i的記憶體地址,系統在讀取到記憶體地址之後再讀出該記憶體所存的數值,而*p的記憶體地址等於i的記憶體地址,所以*p的數值與i的數值是一樣的,雖然 在賦值語句之後,*p等價於i, 但是不能說直接把數值賦了*p。*p=&i的含義是變數i的地址作為一個資料存放在指標變數p所對應的記憶體單元中。

二維陣列中,二維陣列第i行的首地址為:a[i],*(a+i)。請詳細說明一下這兩個怎麼來的。看不懂。大俠門多謝

10樓:匿名使用者

a[i] 與 *(a+i) 的作用一樣

陣列是一片相鄰的記憶體地址

a是儲存陣列的首地址

*(a+i) 就是地址的操作

a[i] 就是用 operator 把上面那個定義成符號

11樓:目標月薪

例如:int a [ i ] [ j ];

a[i] 等於&a[i][0]

*(a+i) 等於&*(*(a+i)+0)

c語言中二維陣列*(a+i)的意義

12樓:

*(a+i)——二維陣列第i行(從0起算)第一個元素的地址。

13樓:匿名使用者

所謂*(a+i)等價於a[i],而a[i]是一個陣列名,那麼a[i] = &a[i][0],陣列名等與首元素的地址

*(*(a+i)+j)是不是表示第i+1行第j+1列個元素的值?

14樓:匿名使用者

反過來思考一下:

如果 *(a+i) 是第i行的行首元素,那麼第i行的第二個元素應該怎麼表示呢?

a+i 和 *(a+i)雖然值相等,但是他們的意義是不同的a+i 是陣列指標的指標,p=a+i;p++;跳過一行*(a+i)是指標,p=*(a+i);p++;跳過一列

15樓:匿名使用者

假設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]的地址

16樓:

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

17樓:聽不清啊

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

18樓:匿名使用者

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

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

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

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

C二維陣列的程式,一個 C 二維陣列的程式

陣列太大了,看看下面 一個由 c c 編譯的程式佔用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由 os 注意它與資料結構中的...

C語言程式設計中 二維陣列中元素指標的表示 的例題,求詳解

二維陣列和指標 用指標表示二維陣列元素。要用指標處理二維陣列,首先要解決從儲存的角度對二維陣列的認識問題。一個二維陣列在計算機中儲存時,是按行儲存的,即先儲存第一行的元素,再儲存第二行的元素。當把每一行看作一個整體,即作為一個大的陣列元素時,原來的二維陣列也就變成一個一維陣列了。而每個大陣列元素對應...

C語言中有什麼函式能求二維陣列的一維陣列的長度

你要了bai解二維陣列其實是 du模擬一維陣列zhi 的,因為計算機的儲存機制是一維dao的內.charstr 20 50 這樣其實是定義了20組容一維陣列,其中每組又含有50個char型變數的陣列.你用strlen str 是不行的.這是求一個字串有多少個字元的.應該用sizeof str 這樣就...