C語言,有如下定義intaa不是定義二維陣列a麼,又定

2021-03-03 21:56:11 字數 4562 閱讀 9357

1樓:

其實pa是乙個指向(包含

復3個元製素的)一維陣列的指標,因此可以指向任何乙個包含3個元素的一維陣列

而a[2][3]是二維陣列,可以看作是由a[0]和a[1]兩個包含三個元素的一維陣列組成,如a[0]就可以認為是包含a[0][0]、a[0][1]、a[0][2]三個元素的一維陣列a[0]

這樣就可以理解pa=a的意義了,由於陣列a的首位址實際上相當於a[0]這個一維陣列的首位址,因此pa指向的是a[0][0]的位址,即&a[0][0]

使用指向陣列的指標的好處是,可以把陣列作為乙個整體,如pa++或pa=pa+1會讓pa的值變為&a[1][0],而不是&a[0][1]

與指標陣列的區別是:指向陣列的指標是乙個指標(只不過它指向的是陣列的位址,並以整個陣列為單位作運算),而指標陣列是多個指標(每個元素都是乙個指標)

假定乙個二維陣列的定義為「int a[3][4]={{3,4},{2,8,6}}」則a[2][0]的值為多少

2樓:喜歡種蘑菇

a[2][0]的值為0

int a[3][4]表示定義乙個

copy3行4列的整bai型陣列a;,}表示初始化du陣列。

最外圍zhi{}中的每乙個{}表示依次對每一行賦值,不夠dao的補0},所以,}表示對陣列的前兩行賦值,每行也是依次賦值,不足補0;

int a[3][4]=,}

最終陣列儲存情況:陣列的下標是從0開始的,如下圖所示。

所以a[2][0]的值為0

3樓:匿名使用者

一般編譯器會將沒有初始化的陣列成員賦值為0,所以int a[3][4]=,回}這麼定以後,陣列a裡的成員答如下:

3,4,0,0

2,8,6,0

0,0,0,0

0,0,0,0

所以a[2][0]的值為0

4樓:匿名使用者

c語言裡的下標是從0開始的,所以a[2][0]其實就是上面的智者構造好的陣列中得第三行第一列的元素0.

5樓:匿名使用者

a[2][0]=0

int a[3][4]表示定義乙個3行4列的整型陣列a;,}表示初始化陣列。

表示依次對每一行賦內值,不夠的補0},所以容,}表示對陣列的前兩行賦值,每行也是依次賦值,不足補0;

int a[3][4]=,}

最終陣列儲存情況:陣列的下標是從0開始的

所以a[2][0]=0

6樓:匿名使用者

是0,裡面沒有的值都是用0表示

c語言指標 定義 int *a[3] 和 int *(a)[3] 有什麼區別??? 書上的沒看懂啊

7樓:匿名使用者

int *a[3];

//因為bai:du陣列zhi名等效於dao指標,內//因此:int *(* (a+3)) 該型別為指標,即:該陣列的元素為容指標變數

int *(a)[3];

//因為:陣列名等效於指標,比()、*操作符都要高階。

//因此:int * ( *(a+3 ) == int **(a+3) 該型別也為指標,即:該陣列的元素為指標變數

8樓:匿名使用者

int *a[3] 和 int *(a)[3]沒有區別,這個括號是多餘的。

如果你問的是int *a[3] 和 int (*a)[3]的區別,則:專

(1)int *a[3] 中 a是陣列,陣列中每個屬元素是個int型別的指標;

(2)int (*a)[3]中 a是指標,這個指標指向乙個長度是3的int型別陣列。

其實,這類問題關鍵就是如何理解(),這裡()就是優先操作,先操作(*a),是個指標,後面就是int [3],是個陣列。

9樓:匿名使用者

因為 [ ]的優先順序 會比 *號高;所以 int *a[3]; a先與[3]結合 代表乙個陣列;其次再與int * 結合;

其他的同wxhysoft

10樓:飄秋楓嵐

int *a[3]叫指標陣列,int *(a)[3]叫指向陣列的指標,名字都不一樣,用法也不內一樣。

int *a[3]一般用來存放一系列的字容符串。

如 int *a[3]=;

int *(a)[3]則基本等同於int a[3],用於在函式中做形式引數,接受傳來的資料。如

呼叫fan(a[4][3]);

函式int fan(int *(a)[3])

c語言的陣列問題,若有定義:int a[2][3];以下選項中對a陣列元素正確引用的是 a.a[2][!1] b.a[2][3]

11樓:匿名使用者

選d。乙個二維陣列可以被認為是乙個帶有 x 行和 y 列的**。下面是乙個二維陣列,包含 2 行和 3列:

因此,陣列中的每個元素是使用形式為 a[ i , j ] 的元素名稱來標識的,其中 a 是陣列名稱,i 和 j 是唯一標識 a 中每個元素的下標。i最大值為1,j最大值為2,超出此範圍則表示錯誤。

12樓:孤獨的蠍子

d 因為1>2為假,所以表示式為0 ; 其次!1也就是非真,即為假,所以a[1>2][!1]等價於a[0][0]

13樓:藍人

d,陣列的有效範圍是a[0][0] - a[1][2]

a,b,c都超過範圍了。

14樓:匿名使用者

定義的陣列引用時那個數下標減1

c語言問題求詳細解答 若有如下定義:int a=2,b=3; float x=3.5,y=2.

15樓:時夏

答案選d

你得搞復清楚函式的概念制,乙個函式要呼叫必bai須得有定義。當然如du果呼叫出現zhi在定義之後則可以直接呼叫,dao如果呼叫出現在定義之前,那麼在呼叫之前需要對這個函式進行宣告,宣告和定義必須相同。

還有函式的返回值型別為void時表示函式沒有返回值,不能使用函式的返回值。

a錯 因為呼叫在定義之前但是沒有宣告

b錯 函式定義的時候返回值型別為void,卻欲圖使用函式的返回值。

c錯 函式的宣告返回值為int,定義返回值為void 不相符d正確請採納。

大一c語言題目 24、若有定義語句:int a[2][3],*p[3]; ,則以下

16樓:匿名使用者

核心在於p的型別。

定義等效於

int *p[3];

這裡p是乙個陣列,包含三個元素,每個元素型別為int *所以a p為陣列名, 不可以賦值。

b p[0]為int*, 而a為二維陣列名,等效於int **, 型別不匹配。

c a[1][2]為a的乙個元素,型別是int,所以&a[1][2]是int*, 和p[0]型別相同, 所以這個賦值是合法的。

d 這個沒什麼說的了,錯的比b還離譜, int ***, 賦值給int*, 型別不匹配。

17樓:匿名使用者

定義中p[3]表示乙個陣列,*p[3]表示乙個整形指標陣列,p[0]是陣列成員,是乙個整形指標,p=a錯因為不能向乙個陣列賦值

int a[2][3], a是乙個二維陣列,因此在等式右邊a表示乙個整形指標的指標,不能賦值給整形指標值p[0],a的子陣列a[0],a[1],a[2]才是整形指標

c 中 a[1][2]是乙個整形值,取位址&a[1][2]就是整形指標,可以賦值給p[0]

d a和 &a意思一樣,表示二維陣列a的位址。

在c語言中,設有如下定義: int a=1,b=2,c=3,d=4,m=2,n=2; 則執行表示式:(m=a>b)&&(n=c>d)後,n的值為,過程

18樓:無憂網事

n的值抄仍然為2,沒有改變!

過程:先計算a>b,值為0,賦給m的值為0,表示式m=a>b的值也是0。

對於&&邏輯運算,不管後面(n=c>d)的值如何,都不影響(m=a>b)&&(n=c>d)的最終結果,因此,c語言不再對表示式n=c>d進行計算。因而n的值沒有改變!!

19樓:匿名使用者

n的值為2

a = 1, b = 2 ===> m = a > b ===> m = 0

&&支援短路運算

所以m = a > b的值為0 不用考慮後面的值了所以n的值任然為2

c語言 定義則執行y=(*--p)++後,y的值是

20樓:

這好解釋啊,因為++是後++,要等到把(*--p)的值賦給y後(*--p)的值才會增1。所以結果是y=1,a[0]=2。你可以用下面的**驗證:

int main(void),y,*p=&a[1];

y=(*--p)++;

printf("%d %d\n",y,a[0]);

return 0;}

C定義二維陣列,C 定義乙個二維陣列

不是儲存到記憶體中 就是對陣列dham 3 32768 進行初始化 相當於int a 5 前面的const是說你在用到陣列的值時不能改變他的值 如果沒有const就可以改變 比如我定義的a 5 就可以改變它的元素的值 不如 你可以改變a 0 100 但是dham 3 32768 中的值你就不可以改變...

c語言中,定義了二維陣列a,當呼叫函式fun a

你的fun a 中a是什麼資料型別?無論哪種資料型別,a這種資料型別不存在,你自然不能把它當作形參了!a 表示乙個指向指標的指標標量a,後兩種是函式傳參的形式,是語言定義的規範。可直接將a定義為乙個指標型別,直接傳參 如 typedef a n m p2 darray p2 darray fan p...

若有如下定義 int a 1,b 2,c 3執行語句b a4bac之後,c的值是

3。判斷是從左向右,前面的可以判斷的話後面的不執行。表示式a 4值為1,但表示式b 執行後 c 的值是 4 啊 在這個語句裡用的 c 先返回 c 的初始值3 c的值是4,c c c 1 開始c 3,所以c的值是4!設有 int a 1,b 2,c 3,d 4,m 2,n 2 執行 m a b n c...