理解C语言中的结构
我刚开始学C 我有以下代码:理解C语言中的结构,c,struct,C,Struct,我刚开始学C 我有以下代码: #include <stdio.h> void func(struct Foo foo){ foo.x =1; foo.array[3] =2; } int main(){ struct Foo lol; lol.x = 55; lol.array[3] = 67; func(lol); printf("lol.x is %d and lol.array[3] is %d\n", lol.x
#include <stdio.h>
void func(struct Foo foo){
foo.x =1;
foo.array[3] =2;
}
int main(){
struct Foo lol;
lol.x = 55;
lol.array[3] = 67;
func(lol);
printf("lol.x is %d and lol.array[3] is %d\n", lol.x, lol.array[3]);
return 0;
}
我查了一下,很多时候问题在于没有在.h文件中定义结构。我在一个单独的.h文件中定义了它,但没有帮助。我在.c文件的顶部定义了结构,同样的错误
我在文件顶部添加了以下内容:
typedef struct Foo{
int x;
int array[3];
}Foo;
有人能解释为什么会这样吗
我查了一下,很多时候问题在于没有在.h文件中定义结构。我在一个单独的.h文件中定义了它,但没有帮助
如果在单独的.h
文件中定义了struct,则应将该文件包含在此代码中
#include <stdio.h>
#include "your_file.h"
....
我查了一下,很多时候问题在于没有在.h文件中定义结构。我在一个单独的.h文件中定义了它,但没有帮助
如果在单独的.h
文件中定义了struct,则应将该文件包含在此代码中
#include <stdio.h>
#include "your_file.h"
....
您将看到编译时错误,因为struct Foo Foo无法计算该类型。在使用结构之前必须声明它 您可以包含头文件,也可以只在func定义上方写以下几行。
struct FOO
{
int x;
int array[n]; // n>3
};
您将看到编译时错误,因为struct Foo Foo无法计算该类型。在使用结构之前必须声明它 您可以包含头文件,也可以只在func定义上方写以下几行。
struct FOO
{
int x;
int array[n]; // n>3
};
是的,看起来你发布的代码中没有定义Foo。。。你能在定义它的地方添加代码吗?你是如何定义struct Foo的?你是否包含定义了struct Foo的标题?你没有定义结构。如果你说你在一个单独的头文件中做了,那么你在你发布的代码中没有
这个头文件。如果编译器不知道struct Foo
的意思,则不能使用类型struct Foo
。@Romaldowoho为我编译并运行(将结构定义放在文件顶部后)是的,看起来你发布的代码中没有定义Foo。。。你能在定义它的地方添加代码吗?你是如何定义struct Foo的?你是否包含定义了struct Foo的标题?你没有定义结构。如果你说你在一个单独的头文件中做了,那么你在你发布的代码中没有
这个头文件。如果编译器不知道struct Foo
是什么意思,则不能使用类型struct Foo
。@Romaldowoho为我编译并运行(将struct定义放在文件顶部后),我编辑了文章以显示我在.c文件中添加的内容。如果我在.c顶部或单独的.h文件中定义它,会有区别吗?@Romaldowoho是的,会有区别。如果它是.h
文件,您希望在此.c
文件中使用它,则需要将其包含在.c
文件中。但如果它是在.c
文件的顶部定义的,那么您不需要做任何事情。你所拥有的会有用的,现在就可以编译了。谢谢,出于某种奇怪的原因,我不得不将它移到一个单独的.h文件中。但是,当我运行exe时,它会拒绝我的权限。你知道它为什么会这样吗?好的,我知道了。我很抱歉整个事情都错了,因为我最初是在.h文件中编写代码的,然后将定义也移到了.h文件中,当然这很混乱。当我编译它时,它不能执行二进制文件,因为我编译了.h文件。很抱歉谢谢you@Romaldowoho发生了:)我编辑了这篇文章以显示我在.c文件中添加的内容。如果我在.c顶部或单独的.h文件中定义它,会有区别吗?@Romaldowoho是的,会有区别。如果它是.h
文件,您希望在此.c
文件中使用它,则需要将其包含在.c
文件中。但如果它是在.c
文件的顶部定义的,那么您不需要做任何事情。你所拥有的会有用的,现在就可以编译了。谢谢,出于某种奇怪的原因,我不得不将它移到一个单独的.h文件中。但是,当我运行exe时,它会拒绝我的权限。你知道它为什么会这样吗?好的,我知道了。我很抱歉整个事情都错了,因为我最初是在.h文件中编写代码的,然后将定义也移到了.h文件中,当然这很混乱。当我编译它时,它不能执行二进制文件,因为我编译了.h文件。很抱歉谢谢you@Romaldowoho发生了:)