1. 背景知識
1、字符串就是一個地址。
2. 指向字符串的指針
2.1 代碼A
const char *a = "unix";
char *b = "hello";
pritnf("%s \n", a);
a = b;
printf("%s \n", b);
/**---------input----------**/
// unix
// hello
關於代碼A中Line 1
疑問
- const 作用於下面那一個?
- 指針
a
- 指針
a
指向對象的值
- 指針
對比代碼A中input,我們可以確定,const
修飾的聲明中,a
的地址是可以被改變的。
2.2 代碼B
當我們把代碼A中的Line 5修改為
*a = *b;
編譯器給出錯誤提示:[Error] assignment of read-only location '*a'
中文意思是賦值給只讀位置*a
,*a
就是a指向對象的值,所以 *a = *b
錯誤
2.3 結論
const char *a = "hello"
語句中const
修飾的是a
指針指向內存的值
3. 字符數組
3.1 代碼C
char a[20] = "hello world";
char *b = "hello";
printf("%p = %s\n", a,a);
a[0] = 'a';
printf("%p = %s\n", a,a);
/**---------input----------**/
// hello world
// aello world
關於代碼C中疑問
- 數組的元素和地址是否可以更改
- Line 1 : 字符數組可以對其元素進行更改
把代碼C中Line 4 改成
a = b
或 a = "hi"
都會出現錯誤提示: [Error] assignment to expression with array type
中文通俗意思:不可以賦值給具有數組類型的表達式。這里的表達式是指整個數組的首地址。
也就是說在C語言內部 數組的首地址是不可更改的,相當於被const
修飾
3.2 總結
數組的元素可以更改,而數組的首地址為只讀
4. 拓展
在第二節中,討論了const
對指針對象的作用,那么有沒有辦法讓指針本身只讀?
char *const a;
a = "hello";
printf("%p = %s\n", a,a);
上述代碼會提示 [Error] assignment of read-of 'a'
中文意思為 錯誤:為只讀的'a'賦值
所以,類型描述 *const 變量名
即可讓指針變量為只讀。
我願以為博客園對makedown支持不是很好。沒想到連目錄都支持了。基本功能算是不錯了。美中不足的代碼塊行數顯示不了