错误:将值分配给数组时,分配给具有数组类型的表达式

卡特里娜王

我想将值插入数组的最后一个位置。因此,我创建了函数插入。此函数返回新数组。

在这段代码中,我想插入value=0array={1}的最后一个位置,并指定新的阵列到阵列我在主的开头声明。

所以我写道:

array = insert(&array[0], value, NUM(array), NUM(array)+1)

但是,我收到了错误消息:

ERROR:  assignment to expression with array type` in the line:  
`array = insert(&array[0], value, NUM(array), NUM(array)+1);

但是,如果我声明new_array此错误,则不会发生。

我想知道为什么会这样以及如何解决。

谢谢。

#include <stdio.h>
#define NUM(a) (sizeof(a) / sizeof(*a))

int * insert(int *, int, int, int);

void main(){
    int array[] = {1};
//  int *new_array;
    int value = 0;
    int num = 3;
    int pos = 2;
    array = insert(&array[0], value, NUM(array), NUM(array)+1);
    int i;
    for(i = 0; i < NUM(array); i++) {
      printf("array[%d] = %d\n", i, array[i]);
   }
}



int * insert(int *p, int a, int N, int pos){
    int i;
//   // now shift rest of the elements downwards    
//  for(i = N; i >= 0; i--) {
//      p[i+1] = p[i];
//  }
    
    // increase the size by 1
    N++;
    
    // shift elements forward
    for (i = N-1; i >= pos; i--)
        p[i] = p[i - 1];
 
    // insert x at pos
    p[pos - 1] = a;
    
    return p;
    
}
HS

在C中,数组名称是不可修改的左值。您不能将任何东西分配给数组变量。因此,您在此语句上得到错误:

array = insert(&array[0], value, NUM(array), NUM(array)+1);

new_array是一个指针,请记住数组和指针是不同的。当您访问数组时,它将转换为指向第一个元素的指针(此规则几乎没有例外)1)

另请注意

int array[] = {1};

数组的大小array1当您省略数组的维数时,编译器会根据初始化程序的大小推导它,而您array仅使用一个元素进行初始化因此,数组array一种 int类型元素的数组

就是说

int array[] = {1};

与此相同

int array[1] = {1};

您正在传递NUM(array)+1insert()函数并arrayposindex为posvalue的位置访问元素NUM(array)+1,即访问超出其大小的数组,这是未定义的行为

另外,您不应将其void用作main()function的返回类型根据C语言标准,main()函数的返回类型应为int


  1. 从C11 Standards#6.3.2.1p3 [添加了重点]

3除非它是sizeof运算符,_Alignof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则将类型为“ array of type”的表达式转换为表达式类型为“类型的指针”的指针指向数组对象的初始元素,而不是左值。....

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

分配结构字段(C)时出现“错误:分配给具有数组类型错误的表达式”

如何解决错误:分配给具有数组类型的表达式

分配给具有数组类型错误的表达式

C编程:错误:分配给具有数组类型的表达式

C错误分配给具有数组类型的表达式

数组问题:分配给具有数组类型的表达式

`错误:在尝试设置结构成员时分配给具有数组类型的表达式`

分配给具有数组类型的表达式 AND 请求非结构体或联合体中的成员

分配给数组类型为C的表达式

编译错误:尝试将数组分配给数组时,从不兼容的类型“char”分配给“int”

Java:将值分配给数组

将值分配给NumPy数组

将值分配给结构数组

将值分配给数组指针

将值分配给动态数组

分配给数组类型为ch = ch +(s [i])的表达式;

将int分配给数组时出现分段错误

如何将内存分配给具有数组成员的类实例?

将值分配给数组时崩溃

如何将匹配表达式的值分配给 Scala 中的二维数组元素?

PHP | 将值分配给具有键数组的任何多维数组的函数

将预处理器宏分配给数组成员时,如何避免出现“期望表达式”错误

为什么分配给下标数组有效,而分配给解引用后的指针算术表达式-无效吗?

未将所有数组元素分配给模型

autohotkey将文本表达式分配给变量

无法将变量数组分配给类型数组

将具有Javascript数组值的输入文本字段分配给javascript Array变量

无法将值分配给具有记录数组的对象

Python:将值分配给具有设置元素的二维列表数组