#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