利用指針引用數組元素,比較方便靈活,有不少技巧。在專業人員中常喜歡用一些技巧,以使程序簡潔。在看別人寫的程序時可能會遇到一些令人混淆的情況,要仔細的分析。
請分析下面幾種情況(設p開始時指向數組a的首元素(即p=a)。
① 分析:
p++;
* pi;
p++使p指向下一元素a[1]。然后若再執行* p,則得到下一個元素 a[1]的值
②
*p++;
由於++和*同優先級,結合方向為自右而左,因此它等價於 *(p++)值。
先引用p的值然后,實現*p的運算,然后使p自增1
例8.7 的第2個程序中最后一個 for語句
for(i=0;i<10;i++,p++)
printf("%d", * p);
可以改寫為
for(i=0;i<10;i++);
printf("%d”,*p++);
作用完全一樣。它們的作用都是先輸出*p的值,然后使 p值加1。這樣下一次循環時:
* p就是下一個元素的值。
③ *(p++)與*(++p)的作用是否相同?
不相同
前者是取*p值然后使p加1;
后者是先使 p加1,再取*p,若p初值為a(即&a[o]),
如果輸出*(p++)得到 a[0]的值,
而輸出*(++p),得到a[1]的值。
④++(*p)表示p指向元素加1,如果p=a,則++(*p)相當於++a[0],若a[0]的值為3,則在執行++(*p)(即++a[0])后a[0]的值為4。注意:是元素a[0]的值加1,而不是指針p的值加1;
⑤ 如果 p當前指向 a數組中第i個元素 a[i],則:
*(p--)相當於a[i--],先對p進行“*”運算(求p所指向的元素的值),再使 p自減。
*(++p)相當於a[++i]先使p 自加,再進行“*”運算。
*(--p)相當於a[--i]先使 p 自減,再進行“*”運算。
將++和--運算符用於指針變量十分有效,可以使指針變量自動向前或向后移動,指
向下一個或上一個數組元素。
例如,想輸出 a數組的100個元素,可以用下面的方法:
p=a;
while(p<a+100)
printf("%d", * p++);
或
p=a;
while(p<a+100){
printf(“%d”,*p);
p++;}
但如果不小心,很容易弄錯。
因此在用*p++的運算時,定要十分小心,清楚是先取p值還是先使p加1。
有什么不足的地方歡迎各位大佬指正
操作系統:Windows10
軟件:Devc++
編譯器:TDM-GCC 4.9.2 64-bit Release