我想将值插入数组的最后一个位置。因此,我创建了函数插入。此函数返回新数组。
在这段代码中,我想插入value=0
到array={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;
}
在C中,数组名称是不可修改的左值。您不能将任何东西分配给数组变量。因此,您在此语句上得到错误:
array = insert(&array[0], value, NUM(array), NUM(array)+1);
new_array
是一个指针,请记住数组和指针是不同的。当您访问数组时,它将转换为指向第一个元素的指针(此规则几乎没有例外)1)。
另请注意
int array[] = {1};
数组的大小array
为1
。当您省略数组的维数时,编译器会根据初始化程序的大小推导它,而您array
仅使用一个元素进行初始化。因此,数组array
是一种 int
类型元素的数组。
就是说
int array[] = {1};
与此相同
int array[1] = {1};
您正在传递NUM(array)+1
给insert()
函数并array
在pos
index为pos
value的位置访问元素NUM(array)+1
,即访问超出其大小的数组,这是未定义的行为。
另外,您不应将其void
用作main()
function的返回类型。根据C语言标准,main()
函数的返回类型应为int
。
3除非它是sizeof运算符,_Alignof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则将类型为“ array of type”的表达式转换为表达式类型为“类型的指针”的指针指向数组对象的初始元素,而不是左值。....
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句