结构声明和定义用C

问题描述 投票:2回答:2

如果我们写的是这样的:

typedef struct 
{
    unsigned int counter;
} MyStruct;

这代表结构的声明?

宣言说,我们的编译器某处有具有类型和大小的参数,如上述的结构,没有空间保留在内存中在声明的情况下的结构。

和定义是,因为现在我们在内存中为我们的结构预留的空间:

MyStruct tmpStruct;

还是我错了?

请澄清与结构的情况。

c struct compilation declaration definition
2个回答
2
投票

有不同种类的用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.


2
投票

在灯架上有一个伟大的写了在这里

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);

不过说真的,阅读博客文章,它解释了不仅仅是这个多很多!

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.