C語言指標與自增詳解

2022-06-21 07:54:09 字數 2681 閱讀 1279

在初學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 後置運算 運算子放在變數之後 變數 變數 變數先參與其它運算,然後...