关于C字符数组和指针初始化问题
char str[20];
str = "Hello C!";
为什么这种方式不允许?
char str[20] = "Hello C!";
char *str1;
str1 = "Hello C!";
为什么这两种方式又允许? C 指针 字符数组
[解决办法]
char str[20];
str = "Hello C!";//字符串赋值操作不可以直接用==
//应该用strncpy/memcpy等函数
char str[20] = "Hello C!";
//数组初始化,只有初始化时才可以的
char *str1;
str1 = "Hello C!";
//这个是把常量字符串的首地址赋值给str1,地址赋值是可以,通过地址操作
[解决办法]
慢慢来
1。"Hello C!"这个表达式的语句概念是提供了这个字符串的首字符地址----‘H’的指针
2。str是字符数组的名字,它语法概念是数组首元素的地址----由于数组定义完成(程序执行时)后,数组的存储位置是不会改变的,所以数组名是一个指针不变量(指针常量)
3。str1 则很清楚是指针变量
[结论]由赋值表达式构成的语句
X=Y;
X是不是要求一定是变量吧?
那么:
str="Hello C!";
即:指针常量=H’的指针
str1="Hello C!" ;
即:指针变量=H’的指针
的区别和正误是不是很清楚了。
另外初始化不是简单地把定义和语句组合在一起,尽管某些场合执行效果相同,但不代表意义完全相同之处。等效与等价的关系哟!