c語言 const 關鍵字和指針結合

#include <stdio.h>
#include <stdlib.h>

int main()
{
    //printf("Hello world!\n");
    char a[] = "Hello";
    char b[] = "World";
    const char *p1 = a;
    char *const p2 = a;     //建立指針 p2 的時候就須要初始化,若是聲明(或定義)以後再對其賦值會出現錯誤
    char const *p3 = a;

    //p1[0] = 'X';      //error, read-only location *p1
    p1 = b;             //No error when compiled
    printf("%c\n", *p1);

    p2[0] = 'X';        //No error
    //p2 = b;           //error, read-only variable p2
    printf("%c\n", *p2);

    p3 = b;
    //p3[0] = 'X';        //error, read-only location *p3
    printf("%c\n", *p3);

    /*
    a[0] = 'X';
    printf("%s\n", a);
    printf("%c\n", *p1);
    //p2 = b;       //error: assignment of read-only variable 'p2'
    p2[0] = 'X';
    printf("%s\n", a);
    //printf("")
    //p1[0] = 'H';   //這一句會出現編譯錯誤
    a[0] = 'H';     //這一句不會出現錯誤
    printf("%s\n", a);
    return 0;
    */
    return 0;
}


/*
總結:
const char * 與 char const *是同樣的效果,即指針指向的內容是隻讀的
char *const 表示指針的內容是隻讀的,即指針指向的位置是不可修改的,可是指針指向的內存是可讀可寫的
const char *const pointer 兼有上面兩種,即指針指向的位置不可修改,而且指針指向的內容也不能修改
char *const const pointer 與 const char *const pointer 效果相同
主要是看const關鍵字修飾的是什麼
*/spa

相關文章
相關標籤/搜索