1. 程式人生 > >c語言指標使用小練習

c語言指標使用小練習

c語言指標非常重要,可以成為c的靈魂。為了更深入的理解指標,以下是幾個關於指標的小練習
//指標變數作為函式引數,將兩個變數的值互換
<span style="font-family: Arial, Helvetica, sans-serif;">#import <Foundation/Foundation.h></span>
void swap (int *a, int *b);
void swap (int *a, int *b)
{
    int temp;
    temp = *a;//通過改變指標指向得值來改變變數得數值
    *a = *b;
    *b = temp;
}

int main(int argc, const char * argv[])
{

   
    //指標練習
    //指標變數作為函式引數來改變兩個變數得值
    int a = 28, b = 34;
    int *p = &a;
    int *q = &b;
    swap(p, q);
    printf("a = %d, b= %d", a, b);
    return 0;
}
int main(int argc, const char * argv[])
{

   
    //指標練習
    //陣列元素的指標——陣列元素的指標就是陣列元素的地址,可以用一個指標變數指向一個書組元素
    int a[5] = {33,45,67,34,9};
    int *p , x;
    p = &a[0];//讓指標p指向零號元素的地址
    //利用下標法引用陣列元素
    x = a[3];//將第4個元素的值給x
    //利用指標引用陣列元素
    x = *(p+2);//將第4個元素的值給x
    return 0;
}
通過指標變數輸出整型陣列a的10個元素
int main(int argc, const char * argv[])
{

   
    //指標練習
    //通過指標變數輸出整型陣列a的10個元素
    int a[10], *p;
    p = a;//指標p指向a陣列的0號元素
    
    printf("please enter 10 integer numbers: ");
    for (int i = 0; i < 10; i++) {
        scanf("%d",p++);//每輸入一個數字,指標向後移動一位,指向下一個元素的地址
        }
    p = a;//經過一輪迴圈後,指標已經指向陣列的最後一個元素地址,為了正常打印出結果,需要將指標重新指向首元素
    <pre name="code" class="objc">for (int i = 0; i < 10; i++,p++) {
        printf("a[%d] = %d ", i, *p);
    }

return 0;} 指標使用的小技巧:

假如指標p指向a[0];

則:

(1)p++;

*p;

先讓p加一,指向下一個元素的地址,再做取值操作,即取出a[1]的值。

(2)、*p++;

由於++和*運算同優先順序,結合方式為右jiehe,所以等同於*(p++);先引用p的值,實現*p運算,再讓p的值加一,指向下一個元素的地址。

以上程式的輸出部分可以簡化為:

for (int i = 0; i < 10; i++) {
        printf("a[%d] = %d ", i, *p++);
    }

(3)、*(p++)與*(++p)區別:

*(p++)是:先取p所指向地址的值,然後讓p+1;

*(++p)是:先讓p+1,再取(p+1)後指向地址的值。

(4)、++*(p)。表示取出p指向地址的值後,再將此值加一。