当我想将指针设置为null时,如何修复不兼容的类型错误



我尝试将自构建类型数组分配给NULL时,遇到了一个不兼容的类型错误。这是我的代码:

#include <stdio.h>
#incldue <stdlib.h>
typedef struct {
 int i;
 double j;
} MyStruct;
int main() {
 MyStruct array[10];
 ... //doing something
 *array = NULL;
 return 0;
}

我在Ubuntu上使用:

对其进行了编译
 gcc -o main main.c

编译器显示以下错误:

error: incompatible types when assigning to type 'MyStruct {aka struct <anonymous>}' from type 'void *'
*array = NULL;
       ^

如何将数组分配给null?

我知道阵列和指针是不同的,在大多数情况下,数组名称转换为指针。(正如这个问题所解释的那样:数组名称是指针吗?)但是,当我的程序涉及自我结构的结构时,情况有所不同。

我尝试了以下两件事:

// 1st
int main() {
 int array[10];
 ... //doing something
 *array = NULL; // this gives a warning!!!
 return 0;
}

上面的代码仅在编译时警告,而下面的代码有错误。

// 2nd
int main() {
 MyStruck array[10];
 ... //doing something
 *array = NULL; // this gives an Error!!!
 return 0;
}

我也想知道是什么与众不同。

如何将数组分配给null?

您无法将数组分配给NULL。阵列不是指针。这是一个不可修道的L值,不能保留分配操作员的操作数。

您在语句*array = NULL;中所做的工作等效于array[0] = NULL;array[0]MyStruct类型的,而NULL用于分配指针类型,这使得分配运算符的操作数不兼容。

如果您试图将数组的所有元素设置为 0,则可以做

MyStruct array[10] = {0};

*array产生一个MyStruct类型(非点),该类型不应该与指针类型NULL兼容。作业无效。

也就是说,阵列不可分配。他们不是分配运营商的有效LHS操作数。您可以分配数组的各个元素,而不是数组(如数组变量名称)本身。

引用C11,第§6.5.16章

分配运营商应在其左操作数时具有可修改的lvalue。

然后,第6.3.2.1章

[...]可修改的lvalue是一个lvalue 没有数组类型,没有不完整的类型,没有const符合条件 类型,如果是结构或工会,则没有任何成员(包括, 递归地,所有包含的骨料或工会的任何成员或元素)具有合格的 类型。

相关内容

  • 没有找到相关文章

最新更新