c-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 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会让它读起来更干净。

相关内容

  • 没有找到相关文章

最新更新