// 三者的区别
char *s = "hello world!";
char s[] = "hello world!";
char s[5];
char *s = “hello world!”;
这个相当于创建了一个指针变量s,指针变量s指向常量“helloworld”。
指针变量s位于栈中,字符串”hello world!”位于常量区;
相当于const char *s = “hello world!”;
所以不能通过s来改变字符串”hello world!”的内容。但是s指向的地址可以改变。如:
s[2] = “A”; √
s = “hi world!”; ×
char s[] = “hello world!”;
这个相当于创建了一个普通数组s,位于栈区,str数组里面的内容可以改变,但是str指向的地址是固定的,不能改变。数组的初始化时必须确定大小。
相当于char * const s[] = “hello world!”;
s[2] = “A”; √
s = “hi world!”; ×
char s[5];
这个相当于创建了一个普通数组s,位于栈区,无内容,但数组大小确定。
相当于char * const s[5];
s[2] = “A”; √
s = “hi world!”; ×