指針

//C語言第八講,指針

        

        // 數據的訪問方式直接訪問(直接訪問內存單元中的內容)和間接訪問(通過內存單元編號以及數據所佔字節數,訪問內存中的數據)

        

        //直接訪問

//        int a=20;//(一個字節佔八位)

        // 字節和位

        // 字節是最小的存儲單元,一個字節被稱爲一個存儲單元(內存單元),不同的數據類型所佔的存儲單元也不同

        

        // 一個字節佔八位

            //基本數據類型

        /*char 一個字節      一個內存單元

         short 兩個字節     兩個內存單元

         int 四個字節       四個內存單元

         long四或八個字節    四或八個內存單元

         float四字節        四個內存單元

         double八字節       八個內存單元*/

       // 爲了正確訪問內存單元,每個內存都有一個編號。內存單元的編號稱作地址。

       // 內存地址==地址==內存單元編號

                  //    內存單元中的 內容纔是我們關注的 數據

        

      

        

        //  指針就是內存地址。我們習慣上把內存地址叫做指針(內存地址簡稱爲地址)

//        & 取址符可以查看一個內存變量的內存地址(內存首地址)

//        格式化輸出內存地址用%p

        

//        int a=6666;

//        printf("&a(a的內存地址) = %p\n",&a);

//        

//        int b=45,c;

//        printf("&b(b的內存地址) = %p\n",&b);

//        printf("&c(c的內存地址) = %p\n",&c);

//        double d=3.1415926;

//        printf("&d(d的內存地址) = %p\n",&d);

//        char r='k';

//        printf("&r(r的內存地址) = %p\n",&r);

//        char s='s';

//        printf("&s(s的內存地址) = %p\n",&s);

        

        

        // &取的只是首地址,並不是a只佔這一個內存地址,變量a的數據類型決定a佔幾個內存地址

        

        

        // 指針變量:存放內存地址的變量;

        // 基本數據類型 * 變量名 =內存地址;

        

        //        int *q= NULL;//恆等於0

        //        printf("q=%p\n",q);

        //取值操作符:*。我們通過*來訪問內存單元中存儲的數據。(*取值,&取址)


//        int a=110;

//        printf("a=%p\n",&a);

//        int *p =&a;

//        printf("p=%p\n",p);

//        printf("a=%d\n",*p);

//        printf("a=%d\n",a);

        

//        float b=3.1415;

//        printf("b=%p\n",&b);

//        float *p =&b;

//        printf("p=%p\n",&b);

//        printf("b=%f\n",b);

//        printf("b=%f\n",*p);

        

//        char c='k';

//        printf("c=%p\n",&c);

//        char *p=&c;

//        printf("p=%p\n",p);

//        printf("c=%c\n",*p);

//        printf("c=%c\n",c);

        

//        double d=0.618;

//        printf("d=%p\n",&d);

//        double *p=&d;

//        printf("p=%p\n",p);

//        printf("d=%f\n",d);

//        printf("d=%f\n",*p);

//        

//        long e=140;

//        printf("e=%p\n",&e);

//        long *k=&e;

//        printf("k=%p\n",k);

//        printf("e=%ld\n",e);

//        printf("k=%ld\n",*k);

//        

        

        //指針的重指向,

        //指針變量的賦值意味着重新指向,而不是同時指向多個地址

//        int a=3,b=5;

//        printf("a=%p\n",&a);

//        printf("b=%p\n",&b);

//        int *p=&a;

//        p=&b;

//        printf("p=%d\n",*p);

//        printf("p=%p\n",p);

        

//        int *p;(整形指針)

//        double *q;(雙精度)

//        char *g;()

        

//        指針變量所佔字節數 只與  操作系統有關(32位操作系統下佔4字節,64位操作系統下佔8字節)

//        

//        int a=20;

//        int *p=&a;

//        printf("SizeA = %lu\n",sizeof(a));

//        printf("SizeP = %lu\n",sizeof(p));

        

        // 特別注意

//        int *j = &a;//如果出現*的地方,前邊有任何類型修飾符,比如(int char等),此時*僅僅起到表示作用,告訴編譯器這是一個指針變量(取地址)

        

//        *j=337; // 如果出現*的地方,前邊沒有任何類型修飾符,此時*代表取值操作符,他會把指針指向的區域中的內存取出來(取值)

//        j;// 如果前邊沒有*和類型修飾符,那麼這個變量就是一個指針變量,它裏邊存儲着某一個內存地址

        

        

        // 指針賦值

        // C語言允許使用賦值運算符對指針進行賦值;

        

//        int i,j,*p,*q;

//        p=&i;

//        q=&j;

//        i=1;

//        *q=*p;//如果*p=*q,則輸出結果位0

//        printf("j=%d\n",j);

//        printf("p=%p\n",p);

//        printf("q=%p\n",q);

//        printf("*p=%d\n",*p);

//        printf("*q=%d\n",*q);

        

        // 練習定義一個函數,並且在內部修改外部變量的值;

       

        int value=99;

        printf("&value=%p\n",&value);

        printf("value=%d\n",value);

        changeValue(value);

        printf("value=%d\n",value);

/*前面的定義

//函數聲明

void changeValue(int value);

//函數定義

void changeValue(int value){

    value = 998;

    printf("value=%d\n",value);

  }


*/



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章