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匹配。 寫完以後我發現有點長,樓主給點耐心看,不懂我們再交流 a是整個二維陣列的首地址,short長度為2,sizeof a 2 5 5 50 a 1指向二維陣列的第二個元素,它僅僅是一個指標,如果在a 1前面加一個 號,就是第二個元素的值,即a 0 1 所以,a 1是一個指標,它指向二維陣列中的某個數,指... 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 ...c語言二維陣列問題
C二維陣列如何初始化為,C 二維陣列如何初始化為
二維陣列地址計算等問題,二維陣列地址問題,求詳解