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表示這是一個不能修改值得常量等等。變數 是一個能夠存放某個指定型別...