1. 程式人生 > >C語言之指標*p++和*(p++)區別

C語言之指標*p++和*(p++)區別

    在C語言的指標運算中,經常會碰到以下用法:*++p、++*p、(*p)++、*(p++),在解決問題前,先了解一下基礎:

1、 * 號和 ++ 符號屬於同級運算,且優先運算順序是從右到左。

2、a++ 表示:在當前一整句程式碼中,a取原值,等該句程式碼執行完畢(一個分號表示一句程式碼),下一句程式碼執行前,a會在原值基礎上加1。可以通過以下程式碼理解:

假設int a = 3;那麼

printf("%d", a++); // 輸出3

等價於

printf("%d", a); // 輸出3

a++;

3、* 號在定義變數時,表示型別是指標,如 int *p = NULL 表示這是一個叫p的指標;

     * 號在運算時,表示取指標指向地址的內容,如下面列印語句的*p 表示取陣列的值;

下面通過程式碼說明它們之間的區別:

    int arr[] = {5, 10, 15, 20, 25};
    int *p = arr;
    //------------輸出結果是在單獨執行下面程式碼的前提下----------------//
    //printf("%d\n", *++p);   // 10  p先自+,然後*p,最終為10

    //printf("%d\n", ++*p);   // 6   先*p,即arr[0]=1,然後再++,最終為6

    //printf("%d\n", *p++);   // 5   先執行p++(沒自加成功前面有其他運算子,要先處理),再執行 *

    //printf("%d\n", (*p)++); // 5   先*p,即*p=arr[0]=1,然後1++,該一整句執行完畢後,在下一句程式碼執行前,arr[0] 會在原值基礎上加1 = 6

    //printf("%d\n", *(p++)); // 5   效果等同於*p++