编译c代码时发出警告-不知道原因
我有下面的c源代码。但我得到了如下所述的警告编译c代码时发出警告-不知道原因,c,C,我有下面的c源代码。但我得到了如下所述的警告 void check_func(); int var2[16][128]; int var1[][128]; int i, k; int main() { for (i = 0u; i < 16; i++) { for (k = 0u; k < 128; k++) { var2[i][k] = 4095; } } check_fun
void check_func();
int var2[16][128];
int var1[][128];
int i, k;
int main()
{
for (i = 0u; i < 16; i++)
{
for (k = 0u; k < 128; k++)
{
var2[i][k] = 4095;
}
}
check_func();
//printf("%d", var1[0]);
return 1;
}
void check_func()
{
var1 = &var2[0][0];
return;
}
第二次尝试:
var1 = (void *)&var2[0][0];
首先,让我们忽略2D数组方面。这与您对数组和指针的基本误解不太相关,而且会增加额外的复杂性 使用
var1
,您基本上是在试图声明一个全局变量:
int x[];
这是不合法的。根据您的评论,您似乎有一种错误的印象,即它声明了一个指针,但它却声明了一个未指定大小的数组。作为一个全局变量,编译器必须能够为此数组分配内存,但如果不知道其大小,这是不可能的
请注意,如果将这样的声明用于函数参数,则情况会有所不同:
void foo(int x[]);
该函数不为数组分配任何空间;数组必须已经被分配,而函数取而代之的是指向该数组的指针(或者更准确地说,指向数组的第一个元素)
指针和数组不是一回事。数组在某些上下文中衰减为指针,函数参数允许使用这两种语法,但它们在其他方面是不同的
根据您在
check\u func
中尝试执行的操作:
var1 = &var2[0][0];
您可能希望将var1
声明为:
int* var1;
var2
是int
的2D数组var2[0][0]
属于int
类型&var2[0][0]
属于int*
类型var1
应为int*
类型以匹配首先,让我们忽略2D数组方面。这与您对数组和指针的基本误解不太相关,而且会增加额外的复杂性 使用
var1
,您基本上是在试图声明一个全局变量:
int x[];
这是不合法的。根据您的评论,您似乎有一种错误的印象,即它声明了一个指针,但它却声明了一个未指定大小的数组。作为一个全局变量,编译器必须能够为此数组分配内存,但如果不知道其大小,这是不可能的
请注意,如果将这样的声明用于函数参数,则情况会有所不同:
void foo(int x[]);
该函数不为数组分配任何空间;数组必须已经被分配,而函数取而代之的是指向该数组的指针(或者更准确地说,指向数组的第一个元素)
指针和数组不是一回事。数组在某些上下文中衰减为指针,函数参数允许使用这两种语法,但它们在其他方面是不同的
根据您在
check\u func
中尝试执行的操作:
var1 = &var2[0][0];
您可能希望将var1
声明为:
int* var1;
var2
是int
的2D数组var2[0][0]
属于int
类型&var2[0][0]
属于int*
类型var1
应为int*
类型以匹配提示:查看
intvar1[][128]代码>假设var1
是完整类型,您仍然无法分配给数组,而只能分配给它的元素。这不是指针数组吗?否。请在处读取。如果您想要一个指针数组,它需要是int*var1[128]
。(但根据您在check_func
中尝试执行的操作,您实际上希望var1
只是一个int*
)提示:查看int var1[][128]代码>假设var1
是完整类型,您仍然无法分配给数组,而只能分配给它的元素。这不是指针数组吗?否。请在处读取。如果您想要一个指针数组,它需要是int*var1[128]
。(但基于您在check_func
中尝试的操作,您实际上希望var1
只是一个int*
)我将尝试。。。谢谢实际上,我正在测试var1(这段代码是我编写的用于检查var1如何初始化的示例代码),因此我认为应该改变声明var2的方式。可能是指针数组*var2[128]或类似的东西?@giboo这取决于你最终想要完成什么。我会试试。。。谢谢实际上,我正在测试var1(这段代码是我编写的用于检查var1如何初始化的示例代码),因此我认为应该改变声明var2的方式。可能是指针数组*var2[128]或类似的东西?@giboo这取决于您最终要完成的任务。