C語言有兩種字串宣告方式char s[]和char *s,兩者有什麼差異呢?
Introduction
char s[] = "Hello World"; (只是用字符串常量初始化)
char *s = "Hello World";
char *s = "Hello World";
皆宣告了s字串,在C-style string的函數皆可使用,但兩者背後意義卻不相同。
char s[] = "Hello World";
的s是個char array,含12個byte(包含結尾\0),"Hello World"對s來說是initializer,將字元一個一個地copy進s陣列。
char *s = "Hello World";
的s是一個pointer指向char,由於"Hello World"本身就是一個string literal,所以s指向"Hello World"這個string literal的起始記憶體位置。
#include <iostream>
using namespace std;
int main() {
char s1[] = "Hello World";
char *s2 = "Hello World"; cout << "size of s1: " << sizeof(s1) << endl;
cout << "size of s2: " << sizeof(s2) << endl;
}
size of s1: 12
size of s2: 4
还有很重要的一点,char *s是字符串常量,不能更改.如果*s='a'会报错。静态数据区存放的是全局变量和静态变量,从这一点上来说,字符串常量又可以称之为一个无名的静态变量,
memset(s,'a',20)会报错。
char 【】就可以。分配在stack去。