有人能用一种非常简单的方式向我解释这些代码行的含义吗。
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 int的数组"> - 变量
piped
是指向此类数组的指针 L
是从命令行分配的整数- 指针
piped
被分配为指向足够大的存储器块以用于上述类型的L
阵列
对于这个typedef,您可以从右到左读取声明,因此在中
typedef int pipe_t[2];
你有
[2]
说它是一个2的数组。位置[0]和[1]pipe_t
是变量(类型(名称int
表示pipe_t[2]
是2个int
的数组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 %dn",
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,%d]n", (*another)[0], (*another)[1]);
pipe_t* piped= &test;
printf("{Using pointer} pair: [%d,%d]n", (*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会让它读起来更干净。