C語言中6組指針和自增運(yùn)算符結(jié)合方式的運(yùn)算順序問題
在C語言中,當(dāng)指針運(yùn)算符和++或者–結(jié)合時(shí)很容易分不清運(yùn)算順序,在這里總結(jié)一下,下面一共分析6中組合: * p++,(* p)++,* (p++),++* p,++( * p), * (++p)。
先看段代碼以及輸出:
#include<stdio.h> int main() { int a[3]={1,3,5}; int *p=a; printf("----------------1----------------\n"); printf("%d\n",*p++); printf("%d\n",*p); int i; for(i=0;i<3;i++) printf("%d ",a[i]); printf("\n"); printf("----------------2----------------\n"); p=a;//reset data printf("%d\n",(*p)++); printf("%d\n",*p); for(i=0;i<3;i++) printf("%d ",a[i]); printf("\n"); printf("----------------3----------------\n"); a[0]=1;//reset data p=a; printf("%d\n",*(p++)); printf("%d\n",*p); for(i=0;i<3;i++) printf("%d ",a[i]); printf("\n"); printf("----------------4----------------\n"); p=a; printf("%d\n",++*p); printf("%d\n",*p); for(i=0;i<3;i++) printf("%d ",a[i]); printf("\n"); printf("----------------5----------------\n"); p=a; a[0]=1; printf("%d\n",++(*p)); printf("%d\n",*p); for(i=0;i<3;i++) printf("%d ",a[i]); printf("\n"); printf("----------------6----------------\n"); p=a; a[0]=1; printf("%d\n",*(++p)); printf("%d\n",*p); for(i=0;i<3;i++) printf("%d ",a[i]); printf("\n"); return 0; }
輸出結(jié)果是這樣的:
第一組:*p++,它的運(yùn)算順序是先返回 *p的值,然后p再++。
第二組:(*p)++,他的運(yùn)算順序是先返回 *p的值,然后 *p的值再++,這一點(diǎn)從運(yùn)算后的數(shù)組a的值可以看出來。
第三組:*(p++),運(yùn)算順序是先返回 *p的值,然后p再++,也就是說它和 *p++的運(yùn)算順序一樣。
這三組都是先返回 *p的值,區(qū)別就在于到底是p++還是 *p的值++。
第四組:++*p,先將 *p的值++,然后再返回 *p的值。
第五組:++(*p),先將 *p的值++,然后再返回 *p的值,所以它和++ *p是一樣的。
第六組: * (++p),先將p的值++,然后再返回 * p的值,和 *++p是等價(jià)的。
這三組的特點(diǎn)是最后都是返回 *p的值,不同點(diǎn)在于是 *p先++還是p++。
以上就是本文的全部?jī)?nèi)容,希望大家可以喜歡。
相關(guān)文章
C++中與輸入相關(guān)的istream類成員函數(shù)簡(jiǎn)介
這篇文章主要介紹了C++中與輸入相關(guān)的istream類成員函數(shù)簡(jiǎn)介,包括eof函數(shù)和peek函數(shù)以及putback函數(shù)還有ignore函數(shù),需要的朋友可以參考下2015-09-09C++語法中的函數(shù)重載和默認(rèn)參數(shù)
這篇文章主要介紹了C++語法中的函數(shù)重載和默認(rèn)參數(shù),本文從語法角度通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03