如何解决typedef int pipe_t [2];是什么意思?
谁能以一种非常简单的方式向我解释这些代码行的含义。
typedef int pipe_t[2];
pipe_t *piped;
int L;
L = atoi(argv[2]);
piped = (pipe_t *) malloc (L*sizeof(pipe_t));
解决方法
- 类型
pipe_t
是“ 2个整数的数组” - 变量
piped
是指向此类数组的指针。 -
L
是一个整数,从命令行分配 - 指针
piped
被分配为指向足以容纳上述类型的L
数组的内存块。
对于这种typedef,您可以从右到左读取声明,因此在
typedef int pipe_t[2];
你有
-
[2]
说它是2的数组。位置[0]和[1] -
pipe_t
是变量(类型)名称 -
int
说pipe_t[2]
是2int
的数组
-
typedef
说它实际上是一种类型-用户定义类型的别名,代表2个int
数组。
运行此程序
#include<stdio.h>
int main(int argc,char** argv)
{
typedef int pipe_t[2];
printf("{typedef int pipe_t[2]} sizeof(pipe)_t is %d\n",sizeof(pipe_t));
pipe_t test;
test[1] = 2;
test[0] = 1;
printf("pair: [%d,%d]\n",test[0],test[1]);
// with no typedef...
int (*another)[2];
another = &test;
(*another[0]) = 3;
(*another)[1] = 4;
printf("{another} pair: [%d,(*another)[0],(*another)[1]);
pipe_t* piped= &test;
printf("{Using pointer} pair: [%d,(*piped)[0],(*piped)[1]);
return 0;
};
然后您看到
{typedef int pipe_t[2]} sizeof(pipe)_t is 8
pair: [1,2]
{another} pair: [3,4]
{Using pointer} pair: [3,4]
您会看到pipe_t
的大小为8个字节,相当于x86模式下的2个int
的大小。您可以将test
声明为pipe_t
并将其用作int
的数组。指针的工作方式相同
我添加了没有这种typedef的代码,因此我们发现使用typedef使其可读性更强。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。