如果我们写的是这样的:
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;
}
在灯架上有一个伟大的写了在这里
https://www.microforum.cc/blogs/entry/21-how-to-struct-lessons-on-structures-in-c/
你宣布了第一件事情是有类型声明与结构声明相结合,没有定义,所以没有空间分配是正确的。
声明一个struct正确的说法是:
struct MyStruct
{
unsigned int counter;
};
现在,您可以像这样的情况下的定义:
struct Mystruct myVariableStructInstance = {1234}; // Define struct instance with initializer
它也可以声明与这样的定义相结合:
struct MyStruct_t
{
unsigned int counter;
} MyStructVariable;
这将声明结构类型(结构MyStruct_t),并定义/实例化一个结构体变量为你命名MyStructVariable
现在,您可以通过MyStructVariable成这样声明的函数:
void myFunction(struct MyStruct_t temp);
您将调用简单地用
myFunction(MyStructVariable);
不过说真的,阅读博客文章,它解释了不仅仅是这个多很多!