【问题标题】:How to use typedef variables to functions as arguments如何将 typedef 变量用作函数的参数
【发布时间】:2021-01-19 00:04:25
【问题描述】:
typedef struct {
    int age, height, weight;
} Person;
//this is in global variables

...

Person *p = (Person *)malloc(sizeof(int) * 20); //this is local variable in main function

在这种情况下,我想创建使用 typedef 变量作为参数的函数。

例如, 如果我创建一个像void print_line() 这样打印年龄、身高、体重的函数,我应该在() 中写什么? 一开始我写了void print_line(Person);,但是VS说这是一个错误。

请帮帮我。

【问题讨论】:

  • typedef 定义了现有类型的“快捷方式”,它没有定义变量。 Person 是一种类型,而不是变量
  • void print_line(Person *p) 怎么样?
  • 谢谢。我写了 `void print_line(Person *p) 并且它有效。
  • 您示例中的 malloc() 行看起来很危险。您应该使用sizeof 来获取Person 类型的大小,而不是试图找出一个需要多少int 的空间,例如。 malloc(sizeof(Person) * 5) 其中 5 个。

标签: c function pointers malloc typedef


【解决方案1】:

如何使用 typedef 变量作为函数的参数

就像您使用内置类型一样。

这就是 typedef 背后的全部理念 - 您可以创建自己的类型并像使用任何其他类型一样使用它。

如果你想传递int,你可以这样做

void foo(int input) {...}

如果你想传递你自己的类型,你可以这样做

typedef ...... myType;

void foo(myType input) {...}

题外话

您的代码:

Person *p=(Person*)malloc(sizeof(int)*20);

错了!不要使用sizeof(int),因为您的类型Person 没有那个大小。不太重要 - 但仍然 - 在 C 中,您不会强制转换 malloc。方法是:

    Person *p=malloc(20 * sizeof *p);  // Allocate memory for 20 Person

    Person *p=malloc(20 * sizeof(Person));   // Allocate memory for 20 Person

但第一个是首选。

【讨论】:

  • 谢谢!现在我知道了!你真是个天才!
  • @RiRiHui Genius...好吧 - 不,我不是 - 我只是花了一些时间编写 C
猜你喜欢
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多