C语言中出现[Error] assignment to expression with array type

1.原因

数组不能直接给数组赋值
指针不能直接给数组赋值

2.解决办法

char a[] = {'h','e','l','l','o'};
char b[5];
char* p = NULL;

//错误情况
char c[5] = a; // 不可直接将数组赋值给数组
char d[5] = p; // 不可将指针直接赋值给数组

//正确情况
*p = a; //将数组首元素地址赋值给指针 
strcpy(b,a);//使用标准字符拷贝函数对数组进行赋值
char **p1 = &p;//二级指针可以接收一级指针地址

结构体出现这种问题

需要使用strcpy或者strncpy函数拷贝

在这里插入图片描述

  • 29
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 这个错误提示是因为你试图将一个数组类型的表达式赋值给一个变量。在C语言,数组是一种特殊的数据类型,它们不能像普通变量一样直接赋值。如果你想给数组赋值,需要使用循环或者数组初始化语法来逐个赋值。 例如,下面的代码会导致这个错误: ``` int arr[5]; arr = {1, 2, 3, 4, 5}; // 错误:不能将数组赋值给表达式 ``` 正确的做法是使用循环或者数组初始化语法: ``` int arr[5]; for (int i = ; i < 5; i++) { arr[i] = i + 1; } // 或者使用数组初始化语法 int arr[5] = {1, 2, 3, 4, 5}; ``` ### 回答2: 该错误指的是将一个数组类型的表达式赋值给一个变量,这是不合法的。 在C语言,数组是一组相同类型的元素的集合,这些元素在内存是连续存储的。而表达式则是可以求值的计算式。当我们将一个数组类型的表达式进行赋值时,就会发生上述错误。 例如,如果有一个整型数组a,我们不能将它作为一个整型类型的变量来赋值,如下所示: int a[5] = {1, 2, 3, 4, 5}; int b = a; // 错误:assignment to expression with array type 需要注意的是,可以将数组名作为一个指向数组首元素的指针来进行赋值。如下所示: int a[5] = {1, 2, 3, 4, 5}; int *b = a; // 正确,b指向数组a的首元素 此外,在函数调用也容易出现该错误。当我们使用一个数组名作为函数的参数时,该数组名将被转换为指向数组首元素的指针。但是在函数,我们不能直接将这个指针赋值给一个数组类型的变量,否则也会出现上述错误。 总之,在C语言,应该始终记住数组和指针的区别,避免在程序出现上述错误。 ### 回答3: 这个错误消息意味着你正在尝试给一个数组表达式赋值,而数组不是一个可被赋值的对象。这通常是由于数学运算符被错误地用于数组上,或者由于尝试使用赋值运算符在数组上进行修改所导致的。 例如,以下代码会导致“assignment to expression with array type”错误: int arr[5]; arr = {1, 2, 3, 4, 5}; // 尝试用花括号形式对数组进行赋值 另一个例子是以下代码会导致同样的错误: int arr1[5], arr2[5]; arr1 = arr2; // 尝试将一个数组赋值给另一个数组 要解决这个错误,需要检查代码的语法错误或逻辑错误,并确保没有使用运算符来处理数组。如果你需要将一个数组的值复制到另一个数组,可以使用一个循环来逐个复制每一个元素。例如: int arr1[5], arr2[5]; for(int i=0; i<5; i++) { arr1[i] = arr2[i]; } 总之,要避免错误消息“assignment to expression with array type ”,你应该记住,数组不能直接进行赋值,只能使用循环逐个赋值。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值