c 二維陣列問題3 已知int a 23,2,1則表示式「a

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

1樓:匿名使用者

二維陣列的實際上在記憶體裡儲存格式是一維的

也就是a [3][2]

佔用了 3*2 個int 型別資料的 連續記憶體空間

排放的模式是:

a[0][0] ,a[0][1], a[1][0],a[1][1], a[2][0],a[2][1]

為了表示方便,我打了空格分開了,其實是連續儲存的,只是邏輯上認為是二維的而已。

那麼考慮初始化的問題,int a[3][2]=; 分別賦值給了a[0][0] ,a[0][1], a[1][0]

現在考慮 a[0][2]到底是什麼

a[0][2]其實被編譯器解釋為 *( (*a+0 ) + 2) ,a是陣列首地址,

在c/c++編譯器裡,陣列越界是不檢查的,再考慮上面的儲存格式

也就是說 ,*( (*a+0 ) + 2) 這個值應該是指向了 *( (*a+0 ) + 1) =a[0][1] 隔壁的傢伙

現在你知道是誰了吧,a[1][0]

所以a[0][2]就是a[1][0]=1;

後面的簡單算術問題我就不解釋了。

ps,不完全初始化話,沒有賦值的元素都會被編譯器弄成0。

樓上不少人的解釋都不涉及計算機本身,怎麼也不會答到點子上的。

2樓:來自小金山俏皮的辛德瑞拉

這麼說吧

是越界沒錯 但是這種越界跟超出陣列長度的越界是不一樣的a[0][2]超出a[0]了沒錯 所以直接到a[1][0] 值也就是1

因為在陣列中這些是排成一列的

假設 a[3][2]= a[0][5]看起來已經超出a[0]的長度了 但沒有超出整個陣列的長度 所以可以=a[3][2] =6

所以你的題目 就是3/2/1 因為截尾 所以3/2=1.5=1 1/1=1懂了沒

3樓:代小珍

a[0][2]=1;

原因是初始化的時候,這幾個數是按順序存放在開始的3個元素中的,即a[0][0]、a[0][1]、a[1][0],對吧?

其實a[0][2] 相當於指標的第三個,這個沒多少為什麼,就是這麼定義。相當於指標指向第幾個元素一樣。

你可以試驗一下,

int main( void )

;int m=a[0][0]/a[0][1]/a[0][2];

cout<

return 2;

}答案是多少?

第二行起第三個元素 就是7

你試試吧,哈哈

4樓:匿名使用者

int a[3][2]= a[0][0]=3 a[0][1]=2 a[0][2]=1

所以3/2/1=1

5樓:匿名使用者

a[0][0]=3

a[0][1]=2

a[0][2]=1

a[0][0]/a[0][1]=3/2=1如此:得到答案為1

6樓:匿名使用者

答案是 錯誤的表示式!

c++裡 初始化二維陣列int a [ 2 ] [ 3 ] =0; 正確嗎?是什麼意思?謝謝!

7樓:匿名使用者

不可以如果想定義並初始化可以這樣:int a[2][3]=;//表示二維陣列所有值都賦值成0

也可以先定義再初始化,int a[2][3];a[2][3]=0;//表示把陣列a中第三行第四列數賦值成0

8樓:程式設計大亨

其實bai

這個是進行一個初始化du,你測試一zhi下,如果你只定dao義了int a[3][2],但是你沒有專賦值的話,你輸出屬 顯示全部是亂碼,但是int a[3][2]=;的作用就是為這個3行2列的陣列初始化為零,此時你在輸出,那麼就會顯示是6個零了,正確語法是使用{}

9樓:1a李騰龍

不對,初始化陣列應該把數值用花括號括起來。

c++中定義float a;a=2/3;但輸出結果為0.a=3/2,輸出結果為1.為什麼哇??

10樓:匿名使用者

當然了。

2/3是整型運算,結

果為整型,結果為0,將0賦給變數a,a=0同樣道理,3/2是整型運算,結果內為容整型,結果為1,將1賦給變數a,a=1

並不是定義a為float型,就能影響到等式右邊的計算,等式右邊還是整型運算。

要想得到a的實際值,可用a=2.0/3;或a=2/3.0或a=2*1.0/3,就是等式右邊要引入浮點型進行計算。

11樓:匿名使用者

2/3是個整數表示式。你可以寫成2.0/3,2.0/3.0,2/3.0,(float)2/3或者float a=2; a /= 3

都可以。

12樓:dn_海倫泰勒

在c++中輸出小數要定義精度

main() { int a=2,b=-1,c=2; if(a

13樓:匿名使用者

else關鍵字總是與它前面最接近的一個if組成一對在這題中else語句與if(b<0) c=0組成一對它們這個整體同屬於上一個if(a

因為a=2,b=-1,不能進入if(a

執行printf("%d\n",c)

這個時候c未做任何改變,

所以值為2

14樓:匿名使用者

這樣寫你看的更清楚:

main()

{int a=2,b=-1;c=2;

if(a原則,是第二if不成立時的選項。

而執行時,第一個if不成立,所以後面就不執行,直接執行printf語句,輸出2.

15樓:傾聽的你

void main() {

int a=2,b=-1,c=2;

if (a意思是如果a且b<0,才執行c=0。題意不滿足,所以不執行,else於離著它最近的if配對,所以這個程式時一個大的if裡面巢狀一個if—else語句。

所以當a

16樓:匿名使用者

#pragma hdrstop

#include

#include

#pragma argsused

main()

若想他等於3,則

main()

//****************

else c++;

printf("%d\n",c);

system("pause");}

17樓:匿名使用者

if(a

在沒有加大括號的情況下else會自動與最近的if匹配。

c語言二維陣列問題

寫完以後我發現有點長,樓主給點耐心看,不懂我們再交流 a是整個二維陣列的首地址,short長度為2,sizeof a 2 5 5 50 a 1指向二維陣列的第二個元素,它僅僅是一個指標,如果在a 1前面加一個 號,就是第二個元素的值,即a 0 1 所以,a 1是一個指標,它指向二維陣列中的某個數,指...

C二維陣列如何初始化為,C 二維陣列如何初始化為

du瓶邪 include using namespace std int main cout c 也可以寫 int a 10 8 簡單的就是 memset a,0,sizeof a 例如 int a 3 4 a 0 0 0 這樣寫第一個元素初始化為0,其餘也會初始化為0還有一種就是 memset 要...

二維陣列地址計算等問題,二維陣列地址問題,求詳解

二給陣列在內在中是連續儲存的,若有int a 20 20 則儲存如下示意 第1行 a 0 0 a 0 1 a 0 2 a 0 3 a 0 4 a 0 5 a 0 6 a 0 7 a 0 8 a 0 9 a 0 10 a 0 11 a 0 12 a 0 13 a 0 14 a 0 15 a 0 16 ...