我正在尝试创建一个空数组。以下是我的代码:
if(n == 0 || n == 1)
{
factors[] = {};
}
然而,它说它期望在 [] 和 {} 中有一个表达式。如何正确使用语法实现这样的操作?
我正在尝试创建一个空数组。以下是我的代码:
if(n == 0 || n == 1)
{
factors[] = {};
}
请尝试执行以下两个案例,以便更好地理解gcc的实际情况。
案例1:
#include<stdio.h>
int main()
{
int arr[]={};
printf("size:%d\n",sizeof(arr));
}
案例二:
#include<stdio.h>
int main()
{
int arr[]={};
arr[0]=100;
printf("size:%d\n%d\n",sizeof(arr),arr[0]);
}
factors[] = {};
,您不能这样做,因为这不是数组factors的声明,尽管您试图使用{}结构分配没有值。只有在初始化数组时才能将[]留空。int arr[]={};
实际上是无效的吗? - Sourav Ghoshint arr[]={};
是无效的(仅在理论上)。但实际上,这是有效和可能的。如果您执行了我在答案中提到的两种情况,您将清楚地理解这一点。 - surendra nath--pedantic -Wextra -Werror -Wall
。这些开关有助于进行严格编译,即将所有警告视为错误,并生成完全平台无关的代码。 - surendra nathgcc -std=c11 -pedantic-errors
,其中-std=c11是当前的C标准,而pedantic-errors意味着“根据标准要求进行实际编译”。如果您不设置这些内容,则无法将GCC用作标准的C编译器。 - Lundin从技术上讲,您无法使数组为空。数组的大小是固定的,无法更改。
如果您想要重置数组中的值,请使用具有默认值的另一个数组进行复制,或循环遍历数组并重置每个值。
你不能释放数组的内存,因为它是固定的。但你可以使用memset函数设置一些默认值,比如'0'。
void *memset(void *arrptr, int value, size_t n);
在声明数组时,可以使用表达式[]和{}。
head == NULL
)。但数组不行。所以也许你误解了你的任务,使用了“array”。 - Support Ukraine