亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求大神解下關于c語言的題目

求大神解下關于c語言的題目

C C++
這不是個bug 2015-12-15 20:34:04
我成功被*p++,*(p++),*(++p),*(p+2),*++p給弄糊涂了。問題一:*p代表地址,*(p+2)中的p代表常量嗎?問題二,搞不懂下面代碼。能都詳細講下嗎?謝謝兄弟了。#include<stdio.h>main(){ int k,a[]={1,3,5,7,9},*p=a; printf("%d,%d,%d\n",*p,*(p++),*(p+2)); printf("%d,%d,%d\n",*p,*p++,*++p); p=a; printf("%d,%d\n",(*p)++,*(p++)); for (k=0;k<5;k++) printf("%d",a[k]); printf("\n");}
查看完整描述

2 回答

?
漢江怪人

TA貢獻50條經驗 獲得超11個贊

p是地址 *p的*是取出p地址中存放的值的符號剛開始把 數組a的數組名(數組名a是一個地址常量)賦給變量p(這里的p是存放地址的變量) p++就是讓p里面的地址變成下一個元素的地址,其他運算符 +、-之類的都同理,試一下就知道了?

查看完整回答
1 反對 回復 2015-12-16
?
onemoo

TA貢獻883條經驗 獲得超454個贊

在定義變量時,變量名前面的*號代表這個變量是指針:

int *p=a ?這樣p是一個指向int的指針,并且被初始化為指向a數組的第一個元素。

在使用指針時,變量名前面的*號代表“解引用”這個指針,也就是得到指針所指的對象。

我先單獨解釋下?*p ?*(p++) ?*(p+2) ?*p++ ?*++p 這幾個表達式的行為:

  • *p: 就是得到p所指的對象,也就是a中的第一個元素。

  • *(p++): p++得到的還是p,所以解引用(*)后還是得到p指向的對象,但是p++還會使p自增1,所以之后p就指向之前位置的后一個元素了。

  • *(p+2): 先p+2,即得到指向p(p指向a的第二個元素)后面第二個位置元素的指針(不是p,這一步也不會改變p的指向),再解引用(*)得到p所指位置后面第二個元素。

  • *p++: 后置++運算符的優先級要高于*,所以本表達式和*(p++)一樣。

  • *++p: 前置++運算符的優先級也高于*,且離得更近,所以會先運算 ++p, ++p表達式得到的就是指向p后面一位的指針。再解引用(*)這個指針得到原p所指的后面一位的元素。并且之后p也會自增1,p同樣也指向原來p位置之后的那個元素。

注: ++p 和 p++ 的行為是不同的,上面用下劃線標出了區別。


下面是另一個重點:這幾個printf語句都不該這樣寫!

一個大概的規則是:如果自增或自減運算符應用到一個變量上,那就不要在同一個表達式(或許是語句)中再次使用這個變量! ?(這句不是很準確,因為原因比較復雜,你可以先這樣記)

那么這幾個pritnf語句的毛病就是:這個語句中使用了p++或++p,同時又再次多次使用了p。 這樣的語句的行為是不確定的。

查看完整回答
反對 回復 2015-12-16
  • 2 回答
  • 1 關注
  • 1629 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號