使用 c typedef/使用类型别名

新手上路,请多包涵

我正在阅读 C++ 入门书,完全不明白一行:

  using int_array = int[4];
 typedef int int_array[4]; // This line
 for (int_array *p = ia; p != ia + 3; ++p) {
      for (int *q = *p; q != *p + 4; ++q)
          cout << *q << ' '; cout << endl;
 }

好的 typedefusing 相同。这是否意味着 int[4][4] 现在是 int 以及如何理解? for 循环中的 int_array 是什么类型?

谢谢

原文由 Somethone 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 350
1 个回答

TL;博士

两者都在做同样的事情:将 int_array 定义为 4 数组的别名 int s

理解语法

using 有一个很好的 A = B 符号,通常更容易理解。

 using alias = type;

typedef 的符号并不完全落后。对于一个简单的 typedef

 typedef type alias;

但更复杂的 typedef 往往会蔓延。我怀疑语法是根据定义变量的方式建模的,但我找不到我将旧 K&R C 编程书的副本打包在哪里,目前无法查找。

 int int_array[4];

int_array 定义为 4 int s 的数组。拍打 typedef 正面

typedef int int_array[4];

使 int_array 成为类型别名而不是变量。

另一个例子,

 int * intp;

intp 定义为指向 int 的指针。

 typedef int * intp;

intp 定义为指向 int 的类型指针的别名。

对于更复杂的数据类型,这变得很难看,因为 typedef ed 别名的名称可能被埋在定义中间的某个地方。一个 typedef ed 函数指针例如:

 typedef void (*funcp)(param_t param1, param_t param2, ...);

与使用

using funcp = void (*)(param_t param1, param_t param2, ...);

制作二维数组

如果你想要一个二维数组,你可以

using int_array2D = int[4][4];

或者您可以定义一个 int_array 数组

using int_array2D = int_array[4];

当然这意味着你可以

using int_array3D = int_array2D[4];

继续前进,直到奶牛回家,或者你已经包装了如此多的维度,以至于 医生 的大脑都融化了。

原文由 user4581301 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题