# C的指針 分析

示例說(shuō)明不同指針表達(dá)式的左右值語(yǔ)義


示例:

char ch='a';
char *cp=&ch;

cp:一個(gè)保存ch地址的值.

*cp:指的是cp指向的地址的值。

參照上面的示例,描述一下不同表達(dá)式,左值和右值得意義:

表達(dá)式 右值 左值
&ch ch的地址 非法
cp cp的值 cp所處的內(nèi)存位置
&cp 指針變量cp的地址 非法
*cp cp所指向的地址的值 cp所指向的內(nèi)存位置
*cp +1 cp所指向的地址的值 +1 非法
*(cp +1) cp所指向的位置前進(jìn)一個(gè) 非法
cp++ 先返回cp的一份拷貝,cp的值再加1 非法
++cp cp的值加1后返回cp的拷貝 非法
*++cp cp所指向位置的后面一個(gè)值 cp所指向位置的后面一個(gè)位置
*cp++ cp所指向位置的值 cp所指向的位置
++*cp 對(duì)cp所指向位置的值加1 非法
(*cp)++ 拷貝cp所指向位置的值,并加1 非法
++*++cp 拷貝cp所指向位置后面一個(gè)位置的值加1 非法
++*cp++ 指向cp所指向的位置然后加1,產(chǎn)生一份拷貝 非法

注意: 書(shū)上說(shuō)是++比*的優(yōu)先級(jí)要高.但是不要用這個(gè)規(guī)則來(lái)分析上述表達(dá)式的語(yǔ)義。

我簡(jiǎn)單總結(jié):

  • 當(dāng)*和++都在左邊的時(shí)候,按照從右向左分析語(yǔ)義
  • 如果* ++分布在變量的兩邊的時(shí)候,先后綴++,然后'*' .
  • +操作符比*優(yōu)先級(jí)低
  • *cp++ 解釋下過(guò)程:
  1. ++操作符產(chǎn)生一份cp的拷貝
  2. 然后++操作符增加cp的值
  3. 最后在cp的拷貝上進(jìn)行上執(zhí)行間接訪問(wèn)操作。
  • 同理*++cp 解釋過(guò)程
  1. ++操作符增加cp的值
  2. 然后產(chǎn)生一份拷貝
  3. 最后在這份拷貝上執(zhí)行間接訪問(wèn)操作

學(xué)習(xí)程序


用指針代替數(shù)組存字符串的小demo.

因?yàn)镃中空間都要事先分配,我表示我也很尷尬.

char *str=(char *)malloc(10);
printf("%d\n",str);
*str='a';
printf("%d———%c\n",str,*str);
*++str='b';
printf("%d———%c\n\n",str,*str);
  • *str默認(rèn)指向的是所分配內(nèi)存的第一個(gè)位置

總結(jié)


  • C指針和數(shù)組兩者是可以替換的,用數(shù)組的地方可以換成指針。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容