Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解C语言中的结构_C_Struct - Fatal编程技术网

理解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

我刚开始学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, 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发生了:)