【问题标题】:Declaring a pointer to a structure in its field [closed]在其字段中声明指向结构的指针[关闭]
【发布时间】:2016-03-09 20:57:31
【问题描述】:

我需要对结构指针进行类型定义,然后在其字段中使用新类型。

我的意思是不要这样做:

struct app 
{
   char *data;
   struct app *ptr;
}

我需要在某处输入typedef app* appPtr; 然后像这样使用它:

struct app 
{
   char *data;
   appPtr ptr;
}

我怎么能做这样的事?

PS:我需要同时使用appPtrapp 类型。

【问题讨论】:

  • 不要typedef指针!这是混淆的保证,因为它隐藏了不同的语义。只是typedef struct 本身。
  • 我知道不建议对指针进行类型定义,但出于某种原因我必须这样做。基于这个假设,我该怎么做? @Olaf
  • typedef-ing 指针在 C 语言中是合法的。它很少有很好的用途,如果有的话。我发现最好不要使用该构造。然而,询问如何做到这一点并不会使这篇文章成为一个糟糕的问题。

标签: c pointers struct typedef


【解决方案1】:

可以使用struct前向声明来完成。这是一个实现该概念的示例代码:

#include <stdio.h>

struct app;
typedef struct app* appPtr;

struct app 
{
   char *data;
   appPtr ptr;
};

int main(void)
{
   struct app myApp = { "myApp", NULL };

   printf("%s, %p\n", myApp.data, (void *) myApp.ptr);
   return 0;
}

但是,正如在问题的 cmets 中提到的那样,我不建议将其作为正确的做法,因为它会使代码变得模糊,并且随着间接级别的增加,事情会变得一团糟。

【讨论】:

    猜你喜欢
    • 2020-07-29
    • 1970-01-01
    • 2017-09-01
    • 2021-12-03
    • 2020-04-30
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多