今天写c程序时遇到这样的编译问题
char str [10];
str [] ="welcome";
报语法错误
char str [10];
str="welcome";
也报语法错误
这是为什么呢?
如果是其它的变量,比如:int a=1;
可以分写成两个表达式:
int a;
a=1;
可是字符数组 char str []="welcome";
就不可以写成:
char str [10];
str [] ="welcome";
最后的解释是:
char str [10];
这条语句执行后,str是一个常量,指向开辟的空间的首地址。
str [] ="welcome";
这句的 str[] 这样引用本身就是不对的,只有在定义时才能这样:
char str[]="welcome";
int a[]={3,4};
其它地方array[]是非法的。
如果改成这样:
str="welcome";
还是不对,因为此时str是一个常量,你不能给一个常量赋值。
但是如果这样定义:
char *str;
然后就可以这样用了:
str="welcome";
可是好像又不能看懂了,为什么这里就可以”str="welcome";”了呢?
其实这句话表示将“welcome”字符串的首地址赋值给str,再解释就是:先将welcome放在一片内存空间里,然后把这片内存空间的首地址给str。
在程序里面,指针所在的空间和字符串所在空间是不一样的~、
用一段代码看看char str1[]="welcome";和 char *str2;str2=”welcome”;的区别
今天写c程序时遇到这样的编译问题
char str [10];
str [] ="welcome";
报语法错误
char str [10];
str="welcome";
也报语法错误
这是为什么呢?
如果是其它的变量,比如:int a=1;
可以分写成两个表达式:
int a;
a=1;
可是字符数组 char str []="welcome";
就不可以写成:
char str [10];
str [] ="welcome";
最后的解释是:
char str [10];
这条语句执行后,str是一个常量,指向开辟的空间的首地址。
str [] ="welcome";
这句的 str[] 这样引用本身就是不对的,只有在定义时才能这样:
char str[]="welcome";
int a[]={3,4};
其它地方array[]是非法的。
如果改成这样:
str="welcome";
还是不对,因为此时str是一个常量,你不能给一个常量赋值。
但是如果这样定义:
char *str;
然后就可以这样用了:
str="welcome";
可是好像又不能看懂了,为什么这里就可以”str="welcome";”了呢?
其实这句话表示将“welcome”字符串的首地址赋值给str,再解释就是:先将welcome放在一片内存空间里,然后把这片内存空间的首地址给str。
在程序里面,指针所在的空间和字符串所在空间是不一样的~、
用一段代码看看char str1[]="welcome";和 char *str2;str2=”welcome”;的区别
标签:字符,数组,10,int,welcome,char,str,常量,赋值 From: https://blog.51cto.com/u_14682436/5923503