char* s=“hello”
s是一个指针,*s的值为’h’,在栈区;
hello”是一个常量,在常量区(也就是在全局区,大致分为代码区,全局区,栈区,堆区)
在有些vs有些版本中是不能直接将“hello”直接赋值给s的(可以将“hello”强制转为 char * 或者用const char * s,将hello强转后,s指向的hello就不在常量区了)。
char* s="hello"后,不能改变s指向的字符串了,s不能作为strcpy、strcat等函数的第一个参数
char s2[]=“hello”
不能用s2=“hi”,应为s2指针是一个常量,不能改变
s定义也是一个指向的数组的指针,但是不是普通的指针,跟上述中s还是有区别的,这边的“hello”是放在栈区的,是可以改变的
其他
s2不是一个普通的指针,体现在sizeof(s2)和sizeof(s)得出来的结果是不一样的,sizeof是看占用内存,sizeof(s)是4,代表一个指针所占字节大小,sizeof(s2)是6,也是整个字符数组所占字节内存大小,包括‘\0’。但是strlen是计算字节长度的,都是5
s=0等价于s=NULL,字符串结尾 * s=0等价于 * s=‘\0’