知識點:
1、char* 表示字元指針類型,當其指向一個字元串的第一個元素時,它就可以表示這個字元串。
如char* s=“abcde”;中,"abcde"是長度為5的字元數組常量,其最後一個元素是’\0’,而這句代表執行的結果是将s指向了"abcde"的第一個字元’a’,str後面的連續記憶體依次存放’b’,‘c’,‘d’,‘e’,’\0’.
2、關于初始化
char * str1= (char*)calloc(sizeof(char)*4);
str1 = "abc";
char * str2 = "def"
char str3[] = "gh"
①str1表示開辟一個長度為4的字元數組,str1指向這塊空間,可以叫做空間1,str1=“abc"做了兩件事,建立一個字元串"abc”(這個字元串的空間不同于空間1),然後讓str1指向"abc"這個字元串,此時str1指向的是一個常量字元串,内容是不可以更改的,任何更改的操作都會報錯,而原來開辟的空間1也會被挂起。
②str2初始化也做了兩件事,建立一個新的字元串"def",是一個常量,建立一個名為str2的指針,指向"def"頭部。也不可對其内容進行更改。
③str3的初始化表示建立一個字元數組,把’g’‘h’’\0’一次填進去,是可以更改的。
一個題目:
已知:char *s=“abcde”; 則sizeof(s)、sizeof(*s)、strlen(s)的值依次是多少?
答案應該是:4 1 5
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
char *s = "abcde";
cout << strlen(s) << " ";
cout << sizeof(s) << " ";
cout << sizeof(*s) << " ";
cout << s + 2 << endl;
return 0;
}
輸出是:
5 4 1 cde
順便輸出了一下s+2的值,不是隻有c哦,而是到’\0’之前都會輸出。