回覆列表
  • 1 # 使用者4469785837472

    當然不是這樣。在c語言中,&&的優先順序比||高,所以當這兩個一起出現的時候,是先算&&再算||,當然,||在c語言也有個陷阱。就是當||的前半部分為真的時候,就不執行後半部,只有前半部分為假的時候才執行後半部分。本題中:a=b=c=1; 於是a,b,c的值都是1,++a||++b&&++c; 中,&&的優先順序高,所以先算++b&&++c, 再跟++a做||運算。於是++a是||的前半部分。而++a的值此時是2,a的值就是2,即為真。於是就不做後半部分的運算。也就沒有++b&&++c的運算。於是b,c的值還是都為1.這下明名為什麼是a=2 b=1 c=1,而不是a,b,c都為2的原因了吧。

  • 2 # 使用者2226384485603

    這是典型的c語言指標題

    int *a表示定義了一個int型的指標

    *a=b表示指標a指向b,即把b賦值給*a;

    &是取地址符,&b代表b在記憶體中的地址,*a=&b表示把b的地址賦值給*a。

    利用編譯器編譯該程式碼:

    結果為:

    拓展資料

    *和&運算

    (*p)操作是這樣一種運算,返回p 的值作為地址的那個空間的取值。(&p)則是這樣一種運算,返回當時宣告p 時開闢的地址。顯然可以用賦值語句對記憶體地址賦值。我們假設有這麼兩段記憶體地址空間,他們取值如下:(單位:H,16 進位制)

    假設有這麼一段程式碼:(假設開闢空間時p 被分配給了3001H、3002H 兩個位置)

    int *p;

    p=2003H;

    *p=3000H

    **p的值為多少?

    **p=*(*(p))=*(*(2003H))=*(3000H)=3000H。

    那麼&&p、*(&p)和&(*p)又等於多少?

    &&p=&(&(p))=&(3001H),此時出錯了,3001H 是個常數怎麼可能有地址呢?

    *&p=*(&(p))=*(3001H)=2003H,也就是*&p=p。

    資料來自於:

  • 中秋節和大豐收的關聯?
  • 為什麼奧斯曼土耳其中世紀一直佔據巴爾幹半島到近代巴爾幹卻成了俄奧土三方角逐的場域?