C語言中p的運算過程。求解,c語言中,p1的計算優先順序

2021-03-04 04:29:04 字數 4179 閱讀 7862

1樓:匿名使用者

也是等效於bai*(p++)='a'+k;

你寫成這樣 執行,會發現du結果相同

*(p++)並不是zhi先自dao加 再取值。 對於後內建自加,括號容的用途只是和誰結合,而不說運算順序

不管有沒有括號,後置自加,都是先取值 再自加。

也就是賦值*p之後 再自加。

2樓:匿名使用者

只能說是有=號

~~~~~~~~~~~~~

c語言中,*p+=1的計算優先順序

3樓:文化廚子

這是複合賦值表示式。等同於:

*p = *p + 1; //指標p所指向的內容加1後儲存到指標p所指向的地址中。

所以,優先順序是先算*,在這裡*運算子並不是乘法運算子,而是指的間接引用運算子,然後再算+運算子。

4樓:匿名使用者

*運算子的優先順序高於符合運算子+=,即*p += 1的功能等同於++(*p)或(*p)++,也就是說,增加的是p指向的內容,而不是改變指標的指向。

5樓:匿名使用者

*p+=1

首先是p+=1也就是p++

然後再*p,也就是間接引用,

你也可以這樣理解,*(p+=1)語法有錯哦,只是幫你理解而已

6樓:匿名使用者

*p=*p+1;過細的不講了,怕誤人子弟;自己看看優先順序,就知道怎麼算了,最主要是知道+=;*=;-=;這些是什麼語法,如果你知道就不會問了

7樓:匿名使用者

應該是先加的 因為*p++中是先加的

8樓:匿名使用者

先*p然後再*p加1

c語言中*p++和(*p)++有什麼區別?

9樓:慕容冰綃

我看書中解釋:*p++:是先取出*p的值,再使p加1//p是個指標,給p加1,相當於讓p指向了x所在地址的下一個位置,而對於x則是沒有任何影響

(*p)++:是使*p的值加1.

//*p則是p指向的位置對應的值,題目中是*q,所以此時的*q就是x的值,為3,當輸出*q之後,再給*q即x自加1,所以x就變為4

10樓:魔鬼小波的丶

這些人回答的,一群小屁孩蹭經驗的吧?這個題就應該是3,3,4.①printf("%d\n",*p++);p指標地址加一,所以x還是3。

②printf("%d\n",(*q)++);指標內容加一,但是注意是後加加,此時指標輸出的內容還是之前狀態x=3的。③最後printf("%d\n",x);,此時經過②指標內容已被加1,因為這個類似引用,故可指標可改變原來內容,原x也是4;如果你想出現3,4,4的答案第二個應該是++(*q)

11樓:吳帥帥

*p++是指下一個地址。

(*p)++是指將*p所指的資料的值加一。

c編譯器認為*和++是同優先順序操作符,且都是從右至左結合的,所以*p++中的++只作用在p上,和*(p++)意思一樣;在(*p)++中,由於()的優先順序比*和++都高,所以++作用在()內的表示式*p上。比如有:

int x,y,a=,*p=a,*q=a;

x=*p++;//執行這一句後x=a[0]=1,p=a+1y=(*q)++;//執行這一句後,y=a[0]+1=2,q仍然=a

12樓:春志學陳卓

區別大了。

*p只是一個指標,

**p是一個指向指標的指標

例如int

*p;那麼p就是指向int型別變數的一個指標。(即陣列)如果int**p;

那麼p就是指向int*型別指標的一個指標。(即指向一維陣列的指標,即二維陣列)

13樓:

c編譯器認為*和++是同優先順序操作符,且都是從右至左結合的,所以*p++中的++只作用在p上,和*(p++)意思一樣;在(*p)++中,由於()的優先順序比*和++都高,所以++作用在()內的表示式*p上。比如有:

int x,y,a=,*p=a,*q=a;

x=*p++;//執行這一句後x=a[0]=1,p=a+1y=(*q)++;//執行這一句後,y=a[0]+1=2,q仍然=a

14樓:匿名使用者

由於後置++在執行完後返回運算前的值,所以(*p)++返回的值是3.

但是此時x已經被修改為了4,所以後邊的輸出就是4了。

15樓:尹岑稽菀

while(p)

等價於while(p

!=0)

檢查的是p值是不是0,或者是不是空指標,如果是,則跳出迴圈,不再繼續迴圈體

而while(*p)

相當於while(

*p!=

0)檢查的是p所指向的地址中的資料是否為0,但前提是p不能為null

16樓:繆立軍

後自增操作符總是先把原值賦值給表示式,然後完成自增操作的所以printf("%d\n",*p++);相當於printf("%d\n",*p);p++;

而printf("%d\n",(*q)++);相當於printf("%d\n",*q);(*q)++

所以答案應該是3,3,4

17樓:殤心

*p++等價於*p (返回其值),p++;

*++p等價於++p,*p(返回其值);

(*p)++等價於*p,然後*p的值加1;

真的不知道某些人發很多別人看的很煩的東西是炫耀自己有很多學問嗎?

18樓:官俊暉宣華

*p表示p代表相應資料型別在儲存單元中儲存的首地址,而這個儲存單元儲存的是相應型別資料的數值,

**p表示p也表示地址,簡單的說,這個地址對應的儲存單元儲存的數也是一個地址,而不是數值,而這個被儲存的地址對應的儲存單元儲存的資料才是真正的相應型別的數值!

19樓:大傘夏

printf("%d\n",(*q)++); 先取出 (*q) = 3; 所以輸出3 等取完值後 *p再加1 才是你說的 4

20樓:匿名使用者

(*p)++:是使*p的值加1. 先取得的是*p的值.

21樓:答鴻淡以彤

例如int

*p1,**p2;

兩者本質上都是指標,但是兩者的基型別不同

p1的基型別是int,換句話說p1指標指向的是int型的資料;而p2的基型別是int

*,換句話說p2指向的是指向int型資料的指標,即指向指標的指標

22樓:匿名使用者

y=(*q)++;//執行這一句後,y=a[0]=1,因為++在後,所以是先取值在++,故y=1,在這句話執行之後,a[0]++,此時a[0]=2,q仍然=a。

c語言中*p++,*(++p)的問題

23樓:

*p++ 先取指標p指向的值(陣列第一

個元素1),再將指標p自增1;

(*p)++ 先去指標p指向的值(陣列第一個元素專1),再將該值屬自增1(陣列第一個元素變為2

*++p 先將指標p自增1(此時指向陣列第二個元素),* 操作再取出該值

++*p 先取指標p指向的值(陣列第一個元素1),再將該值自增1(陣列第一個元素變為2)

24樓:最大的_大寶寶

優先順序已經說明了,*p++等價於*(p++),而括號裡的p++的計算結果就是

專p,外面的*與這個p不就是*p了嗎屬。這就是字面上的理解了。編譯器的實現可以等價表示為一個逗號表示式(*temp=*p,p=p+1,*temp),即最終結果就是p指向的初始值

25樓:童之新

運算子的優先順序太多了,通常不去經常記憶都會忘記,其實這種問題沒什麼好糾結的,在自己寫**時,**想優先執行就在那裡加括號,這樣是最保險的,根本就不用去考慮這種優先順序問題了

26樓:匿名使用者

*p++本來就等同於*(p++)。

只是因為是後置自增,才先使用p的當前值,然後p自增。版假設p是指向int型別的指權針,則int n=*p++;和int n=*(p++);都相當於是這樣執行的:

int n=*p;

p++;

c語言中卻運算子如何使用,C語言中取反運算子如何使用

c語言經典例子之按位取反運算子 運算子 是邏輯非運算子 才是按位取反運算子。經過 運算後,回運算結果只答 有0或1 而經過 運算後,結果有多種,取決於運算元。下面通過例項來介紹這個運算子的使用方法 int a 10,b,c b a 運算後b 0,因為a不等於0 即為真 所以取非後等於0 為假 c a...

c語言中process什麼意思,C語言中process什麼意思

void process int a,int b,int fun 這句話的意思是宣告一個無返回值的process函式,形參為int a,int b和一個返回int的函式指標 你這來個圖裡的process只是一源個函式的名稱,bai和常用的printf,scanf在同 du一個等級,區別只是,這zhi...

c語言位運算的問題,C語言中的位運算有什麼優點?

的優先順序比 高,的優先順序也比 高,所以k i j 3 實為k i 專 j 3 屬i 013 00000000 00001011 0打頭的是八進位制 所以 i 11111111 11110100 j 0x13 00000000 00010011,j 3 00000000 00010011 3 00...