C語言 ---- 指標 iOS學習-----細碎知識點總結

來源:互聯網
上載者:User

標籤:

記憶體的訪問形式:1、直接存取:通過變數名進行訪問。2、間接訪問:先找到變數存放的地址,然後根據地址去訪問對應的記憶體空間。

指標---

// 定義一個整形指標變數,用來儲存num1在記憶體中的地址
    int *p = NULL; // 定義一個整形指標變數,指向0x0,NULL恒等於0
    
    printf("%p\n", p); // 輸出指標變數的值,使用"%p"
    printf("&num1 = %p\n", &num1); // 取址運算子,取得變數所在的記憶體位址
    p = &num1; // 給整形指標變數重新賦值
    printf("p = %p\n", p);
    printf("*p = %d\n", *p); // "*"取值運算子,取出地址裡面儲存的資料
    // 當我們定義指標變數的時候,"*"只是起一個標識作用,告訴我們這個變數是一個指標變數。
    // 當我們使用指標變數的時候,"*"表示的是從當前地址裡面取出儲存的資料。

 

// 指標的算術運算,只有加和減
    int num1 = 100;
    int num2 = 200;
    int *p = &num2;
    printf("*p = %d\n", *p);
    printf("*(p + 1) = %d\n", *(p + 1)); // p + 1是指標向高位移動n個位元組,n指的是指標指向的資料類型所佔有的位元組數(int *p移動4個位元組, char *p1移動1個位元組)
    printf("&num1 = %p\n", &num1);
    printf("&num2 = %p\n", &num2);
    printf("p = %p\n", p);
    printf("p + 1 = %p\n", p + 1);
    printf("p - 1 = %p\n", p - 1); // p - 1是指標向低位移動n個位元組,n指的是指標指向的資料類型所佔有的位元組數(int *p移動4個位元組, char *p1移動1個位元組)
    printf("++p = %p\n", ++p);

// 指標和數組
    int array[3] = {1, 3, 5};
    printf("array = %p\n", array); // 數組名就是數組元素的首地址
    printf("&array[0] = %p\n", &array[0]);
    int *p = array;
    printf("%d\n", *p);
    printf("%d\n", *(p + 1));
    printf("%d\n", *p + 1);
    *(p + 2) = 6;

    p[1] = 10; // 指標可以當做數組名來使用
    
    // 指標和數組的區別:所佔空間不同:指標所佔的空間只喝作業系統有關,數組佔用的空間等於數組的元素個數*數組元素類型所佔的位元組數。
    // 數組名是常量地址,不能重指向。指標可以進行重指向。
    int *p1 = NULL;
//    array = p1;
    p = p1;

// 指標和字串
    char str[10] = "iPhone"; // 把常量區的字串"iPhone"拷貝到了棧區,所以可以變更
    char *p = str;
    printf("%s\n", str);
    printf("%s\n", p);
    
    *(p + 1) = ‘X‘; // 使用字元指標操作單個字元
    printf("%s\n", p); // 使用字元指標操作字串
    printf("%c\n", p[3]);
    printf("%c\n", *(p + 3));
    printf("%s\n", p + 2);
    
    char *str1 = "iPhone"; // 棧區的指標str1指向常量區的某一塊地區
    printf("str1 = %s\n", str1);
//    *(str1 + 1) = ‘X‘; // 常量不能修改
    
    printf("str = %p\n", str);
    printf("str1 = %p\n", str1);


// 指標數組
    char *strings[3] = {"iOS", "iMac", "iPad"};
    
    printf("%s\n", *strings); // 取出數組中的第一個元素(數組裡面的元素是地址)
    printf("%s\n", *(strings + 1));
    printf("%s\n", *(strings + 2));
    printf("%c\n", *(*strings));
    printf("%c\n", *(*strings + 1));
    
    printf("\n\n");
    printf("%p\n", strings);
    printf("%p\n", strings + 1);
    printf("%p\n", strings + 2);

C語言 ---- 指標 iOS學習-----細碎知識點總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.