1、在C語言中,沒有字符串類型,因此使用char指針表示字符串。
2、那么問題來了,使用char* 表示字符串,到哪里是結尾呢?因此需要一個特殊的字符作為哨兵,類似迭代器中的end(),這個哨兵就是'\0',注意不是字符0.
3、對於文本字符串,編譯器會自動添加\0。
4、對於字符數組的賦值,如果不使用文本字符串,需要用戶在尾部添加字符\0。對於其他類型的數組,沒有\0的概念。
5、對於char指針,C語言提供了一系列方法,如strlen,strcmp。這些方法有個特點,都是假定最后一個字符為\0。因此對於char指針,我們要保證最后一個字符是\0。
6、考慮sizeof,對於指針,取值為4。對於數組名,雖然數組名也可以認為是指針,但是sizeof(數組名) 取值是整個數組占用的內存,而不是4。思考為什么?
int a[] = {1,3,5,7,}; 我怎么知道a中的元素個數。總不能讓我數吧?
我知道每個int占用內存,要想知道元素個數,我需要知道整個數組占用的內存。因此,我需要sizeof(a)返回整個數組占用的內存大小。
7、char指針指向文本字符串,可以認為char指針是指向const對象的指針;char數組名,可以認為是常量指針,不允許修改指向。
8、sizeof(char數組名) :返回整個數組占用多少個字節,包括\0。
sizeof(char指針):返回4
9、strlen(char數組名) :字符元素個數,直到\0,不包括\0
strlen(char指針):字符元素個數,直到\0,不包括\0