当我想在C中将指针设置为NULL时,如何修复不兼容的类型错误?

Emm*_*mma -1 c null struct pointers variable-assignment

当我尝试将自构造类型数组指定为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;
}
Run Code Online (Sandbox Code Playgroud)

我使用以下方法在Ubuntu上编译它:

 gcc -o main main.c
Run Code Online (Sandbox Code Playgroud)

编译器显示以下错误:

error: incompatible types when assigning to type 'MyStruct {aka struct <anonymous>}' from type 'void *'
*array = NULL;
       ^
Run Code Online (Sandbox Code Playgroud)

如何将数组分配给NULL?

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

我尝试了以下两件事:

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

上面的代码在编译时只有一个警告,而下面的代码有错误.

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

我也想知道是什么产生了影响.

hac*_*cks 5

如何将数组分配给NULL?

您无法分配数组NULL.数组不是指针.它是一个不可修改的l值,不能作为赋值运算符的操作数.

你在声明中所做的*array = NULL;相当于array[0] = NULL;.array[0]是类型MyStructwhile虽然NULL用于指定指针类型,这使得赋值运算符的操作数不兼容.

如果您尝试将数组的所有元素设置为,0那么您可以这样做

MyStruct array[10] = {0};
Run Code Online (Sandbox Code Playgroud)

  • 先生,它不是数组,它是`*array`.:) (4认同)
  • @SouravGhosh; 阅读他的问题的最后陈述,然后编辑我的部分答案. (2认同)