在C語言中,已知定義 int b1,2,3,4,y

2021-03-12 18:49:03 字數 3530 閱讀 5691

1樓:匿名使用者

*p++等效於*(p++),是 先引用後自增,p原先指向b[0],所以y的值為b[0],y=1;p後加1,p指向b[1]

另外b[0]值還是1沒變

2樓:

1樓的回答是copy

錯誤的,執行*p++後並不會修改陣列b中的任何值,執行y = *p++,++的優先順序要高於*,所以等價於y = *(p++),由於初始化時p指向b[0],由於++後置,所以p++在執行*操作時仍然是指向b[0],執行完成後才增加,指向b[1]。因此,*p++ = b[0] = 1。

執行完成後,*p = b[1] = 2,這裡只修改p的值,只是取出陣列b中的值,並不會修改陣列b中的任何值。

3樓:匿名使用者

執行這句y=*p++;時,p指向陣列b的首地址,也就是b[0],由於++是後置,所以y=自增之前的b[0],y的值為1,執行之後b[0]為2;

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

4樓:

這好解釋啊,因為++是後++,要等到把(*--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語言 定義則執行y=(*--p)++後,y的值是

5樓:佼赫然閎竹

這好解釋啊,因抄

為++是後++,要等襲到把(*--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語言問題 若有說明int a[][4]={1,2,3,4,5,6,7,8,9};,則陣列a第一維

6樓:格子裡兮

若有說明int a[][4]=;則陣列a第一維是3。

定義陣列並賦值時c語言規定下標是這樣的,a[n]中的n個元素應該是a[0]....a[n-1]。。

因此int a[4]的寫法就是表示,第一維大小沒限制,但是第二維陣列大小就是4,也就是int a[4]=,,},明顯是3。

分析:二維陣列的一維大小,即指二維陣列的行數,在本題中,按行對二維陣列賦值,因此內層有幾個大括號,陣列就有幾行。

7樓:杜爺1號

答案是b,3.

int a[4]的寫法就是表示,第一維大小沒限制,但是第二維陣列大小就是4,也就是int a[4]=,,},明顯是3.

8樓:小兆

你定義的就是一個二維陣列,第二維的個數是4,為了把所有的資料能分成四份有沒有遺漏,那第一維就是3了。

9樓:寂寞的菸頭哥

首先看陣列後面為4表示有四列二維陣列是

1234

5678

9000

這裡就可以很明顯的看出是三行,所以就是a[3][4],第一個叫做第一維,第二個叫做第二維

c語言……….若有定義語句:int a[4]={1,3,5,7},*p;p=a;則*(p+1)的值

10樓:輕曳風鈴

*(p+1)=3

樓主追問

char s[10] = ;則strlen(s)的值為strlen是計算字串長度,遇到'\0'結束返回長度,所以是則表示式pn->b/n.a * ++pn->b的值是

pn結構體指標指向結構體n,n被初始化成

pn->b/n.a * ++pn->b

<=>pn->b = pn->b+1;

pn->b/n.a*(pn->b + 1)=3/1*2=6結構體的->運算子優先順序大於++

++這裡是前加,先加1後再使用加後的值

11樓:苓愛你無言

*p=a中的a就是&a[0],即a[0]的地址,所以*p(p+1)=a[1]的值,即為3

12樓:匿名使用者

p指向a的首地址,所以*(p+1)=a[1]=3

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

13樓:匿名使用者

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。

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

14樓:匿名使用者

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

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

第二個元素就是答10

15樓:匿名使用者

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

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

16樓:巫馬尓絲

*((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]這樣寫才對。

在c語言中 巨集定義是什麼,在C語言中 巨集定義是什麼?

在c語言源程式中,允許用一個識別符號來表示一個字串,稱為巨集,巨集定義是由源程式中的巨集定義命令完成的,巨集替換是由預處理程式自動完成的。巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括 巨集定義 檔案包含 條件編譯。c語言中的巨集定義用法分為兩種。1 不帶引數的巨集定義比較簡單,就是用...

c語言中12等於多少在C語言中,12等於多少?

首先我們要理解的是 在c語言中是什麼運算。在c語言中,指的是取餘數。有了以上知識作為鋪墊,我們來看一下1 2結果到底是什麼。1除以2,商是0,餘數是1,所以1 2的結果是1。關於 的 的總結 除法運算子 二元運算子,具有左結合性。參與運算的量均為整型時,結果為整型,捨去小數。如果運算量中有一個為實型...

c語言中變數定義是什麼,c語言中exit怎麼定義?

型別說明符 變數名稱 賦值表示式。這是基本的。比如 int a 1 2 char b b 定義了一個整數型變數a 其值為1 2就是3,定義了一個字元型變數b,b的值為字元 b 型別說明符變數名稱還可以加修飾說明,比如前面加上const表示這是一個不能修改值得常量等等。變數 是一個能夠存放某個指定型別...