之前自己写代码碰到 char s[];和char *s 的各种方面总是搞不清楚,知道他们是不一样的,但因为将他们打印出来有都是 相同的地址所以一直懵逼,今天特地网上整理了下,将他们彻底搞定
不同点:
1.在声明时
char *s1="hello";//声明一个指针指向常量"hello" char s2[]="hello";//在栈中开辟一个数组字符"hello"; /** s2[]="hello" 相当于 * char s2[6]; * s2[0]='h'; * s2[1]='e'; * s2[2]='l'; * s2[3]='l'; * s2[4]='0'; * s2[5]=' '; **/
说明:
s1内容不能修改,因为他指向常量
s2内容可以修改,因为他指代内存中的变量区
s2其地址和容量在生命期里不能改变
2.使用时
char str[255];//声明一个字符数组str占255个字节 char *p;//声明一个字符串指针p char *sp;//声明一个字符串指针sp sp = str;/**实际上是 sp=&str; 编译器做过处理**/ //需要有一个指针来保存原先地址 p=sp; *(sp++)='1'; *(sp++)='2'; *sp++='3';//相当于*(sp++) *sp++='4'; *sp++='5'; *sp='