天天看點

【學習記錄】關于char*和char[]的一些問題。

知識點:

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’之前都會輸出。

繼續閱讀