已知int a 31,2,3,4,5,6,7,8,9,則不能表示陣列元素a

2021-04-30 04:51:37 字數 2881 閱讀 9616

1樓:天雨下凡

選擇b*(a[2]+1),b是表示a[2][1]的值,不是地址。

若有說明:int a[][3]={1,2,3,4,5,6,7,8,9,10};則a陣列第一維的大小是 答案是4 為什麼?

2樓:石頭人浮士

因為陣列有10個數字,二維有三個數,10/3>3,所以計算機會自動將a陣列變成a[4][3]

因此一維的大小為4,「4」指一維有四個元素,而每個元素有3個數字

已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},c語言問題

3樓:匿名使用者

int (*ptr)[3]=a這句,

bai將a的首地du址賦值給了ptr,ptr表示的是zhi指向一個含有三個int的數dao組的指標,*((ptr+1)[2])等價於*((ptr+1)+2),等回價於*(ptr+3),這表示從答

陣列a的首地址向後移動3個單位,每個單位為一個含有3個int的陣列,所以一共向後移動了9個單位,即得出執行結果10!

要想正確表達a[1][2],應該是(*(ptr+1))[2],陣列的運算子[ ]比間值運算子*的優先順序高,(*(ptr+1))[2]表示a向後移動一個單位即三個int,此時ptr指向4,再往後移動2個int指向6。

其實遇到這類問題畫記憶體結構圖比較容易理解了

4樓:匿名使用者

(*ptr)[3]=a,陣列

指標只有3行,陣列a有四行,所以(*ptr)[0]=,(*ptr)[1]=,(*ptr)[2]=,所以*((ptr+1)[2])表示的是(*ptr)[2]裡面的回

第二個元素就是答10

5樓:匿名使用者

*((ptr+1)[2])這種用法是不對的,陣列的下標相當與解引用,比如a[2]=*(a+2)

因此,上面的替換做法是(*(ptr+1))[2].

6樓:巫馬尓絲

*((ptr+1)[2])和copy*(*((ptr+1)+2))是等價的,而第二個算式可以演化成*(*(ptr+1+2)),也就是*(*(ptr+3))。

你既然會用指標表示陣列,那麼我用一維陣列給你舉個例子:

int arr[3];

這裡如果要表示陣列的第二個元素,有2種方式 arr[1], *(arr+1),

就是說arr[1] == *(arr+1)

那麼你*((ptr+1)[2])我們只看括號內的內容(ptr+1)[2] ,它按照上邊的等式轉化一下就是*((ptr+1)+2),去掉裡面的括號*(ptr+1+2),也就是*(ptr+3);

*((ptr+1)[2]) == *(*(ptr+3)) == a[3][0]

很好的解釋了為什麼你寫的第一個表示式是10了,

你如果要用ptr表示a[1][2]就應該是*(*(ptr+1)+2)或者*(ptr+1)[2]這樣寫才對。

若有定義int a[][3]={1,2,3,4,5,6,7,8,9,10},陣列元素a[i][j]

7樓:我走的慢

這是個二維

bai陣列。int a【】【

du】第一個中括號表zhi行數,從dao0開始;第二回個代表列,也從0開始;數答組初始化沒有給出初值的陣列元素被編譯器自動賦值為0;

int a[3]=實際為:

int a[3]= 四行三列。

int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};中a[1]是不是常量,為什麼

8樓:風若遠去何人留

int a[3][3]=,,};

這是一個3*3的二維陣列. a[1]是a[1][0]的地址,即第二行首地址. 可以認為是常量指標.

型別相當於int *型.

q=a[1] 型別匹配. 可以賦值.

而&a[1] 並不是int **型, 而是一個陣列指標, 型別為int (*)[3].

所以 int (*m)[3];

然後m=&a[1];

這樣賦值才是正確的.

9樓:

a[1]代表的是第一行元素的首地址或就是一個指標,本身就是一個地址,可以直接賦值給指標

10樓:匿名使用者

&a[1]的型別是 int(*)[3] 不是int**,所以p=&a[1]是不行的

這樣就可以

int (*p)[3]; //p是個指向長度是3的一維int陣列的指標

p=&a[1];

a[1]是個地址,他是個右值(嚴格來說是個常左值),把他看作常量也行

11樓:海濤

a[1]是變數,因為你可以對這個量進行改變,比如a[1]=;

第二個問題大概原因是 a 是一個const **

12樓:匿名使用者

&a[1]是int(*)[3]常量,a[1]是int*常量,所以 q = a[1]正確,你可試試定義int (*p)[3]; 則p = &a[1]正確。int (*)[3]和int*區別是,前者地址單元長是3個int,後者是一個int,如下面**:

int (*p)[3], q;

cout << int(q + 1) - int(q) << endl; // 輸出結果為4,即1個int的長度

cout << int(p + 1) - int(p) << endl; // 輸出結果為12,即3個int的長度

至於&a為啥是int(*),c標準就是這麼規定,一維陣列也一樣,int a[1],則a是int*常量(所謂指標常量可理解為地址),&a是int(*)[1]常量。

加點分。

設int a 7,b 8,則printfd,d na b,ab,a b 的輸出結果是什麼

逗號運算的值 是最右的值.所以 這裡等效於 printf d,d n a,a b 所以輸出7,15 7,15 a b,a 是逗號表示式,取後面的 諸如此類的問題,你儘可以自己寫個函式驗證一下 7,15,因為每個輸出的都是括號裡的最後那個 a b,a 這裡涉及到逗號運算子的先後順序,他是從右到左計算,...

設inta41,3,5,72,4,6,8則a1的值為多少

陣列名是指向陣列第一個元素的固定指標。a 1是a 1 a 1 是a 1 0 2 a 1 的值為2 a的型別為int 4 a 就是a 0 a 0 1 就是 a 0 1 a 1 就是a 0 1 c語言中 a 1 什麼意思 int a 3 4 1,3,5,7 2,4,6,8 a 1 的值 a 1 3。a ...

c語言若已定義 int a 41,3,5,6,9P a則p a的值是求過程

p是指向陣列第三列的地址值 a是指向陣列第一列的地址值 所以 p a 其實就是兩個地址的差值,實際就是前兩列資料所佔的儲存空間 4 2 2 8個位元組 a 2 是在第三行開頭嘛,一行4個,兩行就是8 若已定義 int a 0,1,2,3,4,5,6,7,8,9 p a,i 其中 0 i 9,則對a陣...