char s[]字串和char *s字串有什麼区别?

时间:2023-03-08 16:13:16

C語言有兩種字串宣告方式char s[]和char *s,兩者有什麼差異呢?

Introduction

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
char s[]字串和char *s字串有什麼区别?size of s2: 4char s[]字串和char *s字串有什麼区别?

还有很重要的一点,char *s是字符串常量,不能更改.如果*s='a'会报错。静态数据区存放的是全局变量和静态变量,从这一点上来说,字符串常量又可以称之为一个无名的静态变量,

memset(s,'a',20)会报错。

char 【】就可以。分配在stack去。