Laz*_*zar 2 c struct compilation declaration definition
如果我们这样写:
typedef struct
{
unsigned int counter;
} MyStruct;
Run Code Online (Sandbox Code Playgroud)
这代表结构声明?
声明说我们的编译器在某处有一个结构,其参数的类型和大小与上述类似,并且在声明的情况下,在内存中没有为该结构保留空间。
定义是,因为现在我们在内存中为我们的结构保留了一个空间:
MyStruct tmpStruct;
Run Code Online (Sandbox Code Playgroud)
还是我错了?
请用结构说明情况。
C 中有不同种类的定义 - 类型定义、变量定义和函数定义。类型和函数也可以在没有定义的情况下进行声明。
您typedef的不是声明,而是type的定义。除了定义struct没有标签的a 之外,它还定义了一个对应于那个 的类型名称struct。
a 的声明struct如下所示:
typedef struct MyStruct MyStruct;
Run Code Online (Sandbox Code Playgroud)
这将允许您声明指向 的指针MyStruct,前向声明的函数,MyStruct*等等:
void foo(MyStruct* p);
Run Code Online (Sandbox Code Playgroud)
您拥有的是类型变量的声明/定义MyStruct:
MyStruct tmpStruct;
Run Code Online (Sandbox Code Playgroud)
这是一个完整的示例,其中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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7284 次 |
| 最近记录: |