赋值表达式
为什么C语言不允许使用赋值表达式直接对数组赋值????
[解决办法]
char a[10]="hello";
不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!
易错情况:
char a[10]; a[10]="hello";//一个字符不能容纳一个字符串?且a[10]也是不存在的!
char a[10]; a="hello";//这种情况容易出现,a虽然是指针,但是它已经指向在堆栈中分配的10个字符空间,现在这个情况a又指向数据区中的hello 量,这里指针a出现混乱,不允许!
[解决办法]
因为数组的数组名本质上来说相当于一个指向该数组的第一个元素的指针常量,它不是一个标量。像对象和结构体就不同,可以直接用复制表达式赋值,因为他们都是标量。
[解决办法]
这个问题很好,相关的内容我来聊一聊:
*)C中数组不是严格的数据类型,即平时写
int a[10],b[10];
编译器并不认为a、b有什么类型上相同。
*)在表达式中数组名a,b的语法意义是地址,是数组首元素的地址,数组定义时,这个地址就定下来了--称为指针常量,自然语法层面不能对“常量”赋值了。
*)变通方法1,类似于串拷贝strcpy(目标串,源串),用memcpy(目标数组,源数组,长度)来实现
*)变通方法2,将数组封装到结构中,结构变量是允许赋值的啊!
struct Arr
{ int arr[10];
};a,b;
a=b;//毫无问题
[解决办法]
在表达式中,数组名a,b的语法意义是地址 ,和指针差不多,所以不能直接给数组赋值了
建议楼主看看指针方面的内容