在初學c語言,接觸指標的時候,真的是比較迷惑的一件事,恰巧指標還和自增運算子碰到一起了,更是碰出了無限的可能,正所謂兩儀生四象,四象生八卦啊
為了期末考試,徹底弄明白指標和自增運算子在一起時的各種可能和現象,我們可以直接通過編寫c**來試驗一下
先上結論:
(*p)++,先傳值,後值自增1,模擬a++
*p++ == *(p++),先傳值,後位址自增1
++*p == ++(*p),先值自增1,後傳值,模擬++a
*++p == *(++p),先位址自增1,後傳值
**中設計了abcdefg一共7種可能會出現的情況,對應著abcdefg這7個函式
函式名型別
a(*p)++
b*p++
c*(p++)
d++*p
e++(*p)
f*++p
g*(++p)
然後通過傳入乙個陣列[10,20,30],讓指標和自增在陣列上進行造作,看看最後是什麼結果,指標的值有什麼變化,來推斷出7種可能的結論
原始碼可以執行,方便更直觀的看出指標與自增在一起的運算順序
#include void a(int array[3])
void b(int array[3])
void c(int array[3])
void d(int array[3])
void e(int array[3])
void f(int array[3])
void g(int array[3])
int main(void)
,b[3]=,c[3]=,d[3]=,e[3]=,f[3]=,g[3]=;
printf("array[3]=\np=array\n\n");
a(a); // (*p)++ 先傳值,後值自增1,模擬a++
b(b); // *p++ == *(p++) 先傳值,後位址自增1
c(c); // *(p++) == *p++ 先傳值,後位址自增1
d(d); // ++*p == ++(*p) 先值自增1,後傳值
e(e); // ++(*p) == ++*p 先值自增1,後傳值,模擬++a
f(f); // *++p == *(++p) 先位址自增1,後傳值
g(g); // *(++p) == *++p 先位址自增1,後傳值
printf("\n>> a ---> (*p)++,先傳值,後值自增1,模擬a++\n>> b==c ---> *p++ == *(p++),先傳值,後位址自增1\n>> d==e ---> ++*p == ++(*p),先值自增1,後傳值,模擬++a\n>> f==g ---> *++p == *(++p),先位址自增1,後傳值\n");
return 0;
}
執行結果
array[3]=
p=array
----- a -----
> *p=10
printf("> (*p)++=%d\n",(*p)++);
> (*p)++=10
printf("> *p=%d\n",*p);
> *p=11
----- b -----
> *p=10
printf("> *p++=%d\n",*p++);
> *p++=10
*printf("> *p=%d\n",*p);
> *p=20
----- c -----
> *p=10
printf("> *(p++)=%d\n",*(p++));
> *(p++)=10
printf("> *p=%d\n",*p);
> *p=20
----- d -----
> *p=10
printf("> ++*p=%d\n",++*p);
> ++*p=11
printf("> *p=%d\n",*p);
> *p=11
----- e -----
> *p=10
printf("> ++(*p)=%d\n",++(*p));
> ++(*p)=11
printf("> *p=%d\n",*p);
> *p=11
----- f -----
> *p=10
printf("> *++p=%d\n",*++p);
> *++p=20
printf("> *p=%d\n",*p);
> *p=20
----- g -----
> *p=10
printf("> *(++p)=%d\n",*(++p));
> *(++p)=20
printf("> *p=%d\n",*p);
> *p=20
>> a ---> (*p)++,先傳值,後值自增1,模擬a++
>> b==c ---> *p++ == *(p++),先傳值,後位址自增1
>> d==e ---> ++*p == ++(*p),先值自增1,後傳值,模擬++a
>> f==g ---> *++p == *(++p),先位址自增1,後傳值
C語言複習 指標自增 自減以及
當指標 自增 或者自減 運算子,以及 這三個 運算子在同乙個語句時,要注意 的作用點在 測試 include int main int p i printf d n p printf p d n p printf d n p printf p d n p printf d n p printf p ...
C語言自增自減
i,i 使用i之前,先使i的值加 減 1。i i 使用i之後,再使i的值加 減 1。其中 i和i 的作用相當於i i 1。但是 i和i 不同之處在於 i是先執行i i 1後,再使用i的值 而i 是先使用i的值後,再執行i i 1。例如 i 6a i i的值先變成7,再賦值給a,a的值才為7 b i ...
C語言 自增( ) 自減( )運算
1.作用 自增運算使單個變數的值增 自減運算使單個變數的值減 2.用法與運算規則 自增 自減運算子都有兩種用法 1 前置運算 運算子放在變數之前 變數 變數 先使變數的值增 或減 然後再以變化後的值參與其它運算,即先增減 後運算。2 後置運算 運算子放在變數之後 變數 變數 變數先參與其它運算,然後...