字符數組和字符串的小細節


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 = ba = "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支持不是很好。沒想到連目錄都支持了。基本功能算是不錯了。美中不足的代碼塊行數顯示不了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM