gpt4 book ai didi

c - C 中的结构声明和定义

转载 作者:行者123 更新时间:2023-12-04 11:31:03 24 4
gpt4 key购买 nike

如果我们这样写:

typedef struct 
{
unsigned int counter;
} MyStruct;

这代表结构声明?

声明告诉我们的编译器某处有一个结构,其参数的类型和大小如上,并且在声明的情况下不会在内存中为该结构保留空间。

定义是,现在我们在内存中为我们的结构保留了一个空间:

MyStruct tmpStruct;

还是我错了?

请用结构说明情况。

最佳答案

C 中有不同种类的定义 - 类型定义、变量定义和函数定义。类型和函数也可以在不定义的情况下声明。

您的typedef 不是声明,而是类型 的定义。除了定义一个没有标签的 struct 之外,它还定义了一个对应于该 struct 的类型名称。

struct 的声明如下所示:

typedef struct MyStruct MyStruct;

这会让您声明指向 MyStruct 的指针,前向声明接受 MyStruct* 的函数,等等:

void foo(MyStruct* p);

您拥有的是类型为 MyStruct 的变量的声明/定义:

MyStruct tmpStruct;

这是一个完整的示例,其中 struct 的声明与其定义分开:

#include <stdio.h>
// Here is a declaration
typedef struct MyStruct MyStruct;
// A declaration lets us reference MyStruct's by pointer:
void foo(MyStruct* s);
// Here is the definition
struct MyStruct {
int a;
int b;
};
// Definition lets us use struct's members
void foo(MyStruct *p) {
printf("%d %d\n", p->a, p->b);
}

int main(void) {
// This declares a variable of type MyStruct
MyStruct ms = {a:100, b:120};
foo(&ms);
return 0;
}

Demo.

关于c - C 中的结构声明和定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49566155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com