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陣...