學點 C 語言(20): 資料類型 – 指標

來源:互聯網
上載者:User
1. 通過 &變數 可以擷取變數地址:
#include <stdio.h>int main(void){    int num = 10;    printf("變數值: %d\n", num);    printf("變數址: %d\n", &num);    getchar();    return 0;}

2. 表示變數地址的變數就是指標:

#include <stdio.h>int main(void){    int num = 10;    int *p = &num;    printf("%d, %p\n", num, p);        getchar();    return 0;}

3. *指標 就如同變數本身是一樣的:

#include <stdio.h>int main(void){    int num = 10;    int *p = &num;    printf("%d, %p, %d\n", num, p, *p);    *p = 11;    printf("%d, %p, %d\n", num, p, *p);    (*p)++;    printf("%d, %p, %d\n", num, p, *p);    num = 99;    printf("%d, %p, %d\n", num, p, *p);        getchar();    return 0;}

4. 聲明指標時要注意初始化, 沒有初始化的指標是危險的:

#include <stdio.h>int main(void){    int n1 = 11;    int n2 = 22;    int *p = NULL; /* 初始化為空白 */    p = &n1;    printf("%d, %p, %d\n", n1, p, *p);    p = &n2;    printf("%d, %p, %d\n", n2, p, *p);    getchar();    return 0;}

5. 為什麼沒有初始化的指標是危險的:

#include <stdio.h>int main(void){    int *p;    // 上面的指標 p 沒有初始化話, 但它也有個垃圾地址    printf("%p\n", p);    // 此時如果給它賦值, 誰知道會覆蓋了什麼?    //*p = 100;  /* 不要執行這個 */    getchar();    return 0;}

6. 指向常量的指標: 不能通過指標修改它指向的值, 但該值可以通過其變數修改

#include <stdio.h>int main(void){    int n1 = 111;    int n2 = 222;    const int *p = &n1;  /* 注意 const 的使用 */    printf("%d, %p, %d\n", n1, p, *p);    n1 = 333;    //*p = 333; /* 不可以這樣, 因為現在的指標是常量 */    printf("%d, %p, %d\n", n1, p, *p);    p = &n2;    /* 可以改變指標的指向 */    printf("%d, %p, %d\n", n2, p, *p);    getchar();    return 0;}

7. 常量指標: 鎖定指標的指向

#include <stdio.h>int main(void){    int n1 = 111;    int n2 = 222;    int *const p = &n1; /* 注意 const 的使用 */    printf("%d, %p, %d\n", n1, p, *p);    n1 = 333;    //*p = 333; /* 不可以這樣, 因為現在的指標是常量 */    printf("%d, %p, %d\n", n1, p, *p);//    p = &n2;    /* 現在不可以改變指標的指向了 *///    printf("%d, %p, %d\n", n2, p, *p);    getchar();    return 0;}

8. 指標是有類型的:

#include <stdio.h>int main(void){    long   n    = 100L;    float  f    = 1.5f;    double d    = 3.14159265;        long   *p1   = &n;    float  *p2   = &f;    double *p3   = &d;    printf("%ld\n", *p1);    printf("%g\n",  *p2);    printf("%.8f\n",*p3);    getchar();    return 0;}

9. 令人迷惑的指標定義:

到底應該怎樣寫:
int *p;
int * p;
int* p;

因為 C 語言忽略空白, 這些都是對的, 但下面的例子會說明哪個更好:

#include <stdio.h>int main(void){    int n1, n2, *p; /* 定義了兩個整數(n1、n2), 和一個整數指標(p) */    n1 = 111;    n2 = 222;    p = &n1;    printf("%d, %p\n", *p, p);    p = &n2;    printf("%d, %p\n", *p, p);        getchar();    return 0;}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.