【问题标题】:Pointer to array and dynamic memory allocation指向数组和动态内存分配的指针
【发布时间】:2015-06-19 21:51:49
【问题描述】:

如何在 C 和动态内存分配中使用指向数组的指针创建二维数组,而不使用 typedef 和在指向数组的指针声明时不使用 malloc?我们如何为指向数组的指针进行类型转换? 一般来说,我们如何创建 a[r][c] ,从 int (*a)[c] 开始,然后为“r”行分配内存?

例如。如果我们需要创建a[3][4],我们是这样做的吗?

int (*a)[4];

a= (int (*) [4]) malloc (3*sizeof (int *));

【问题讨论】:

标签: c pointers multidimensional-array


【解决方案1】:

例如。如果我们需要创建 a[3][4] ,我们是这样做的吗?

int (*a)[4];

a= (int (*) [4]) malloc (3*sizeof (int *));

int (*a)[4] = malloc ( 3 * sizeof ( int [4] ) );

或者

int (*a)[4] = malloc ( 3 * sizeof ( *a ) );

或者

int (*a)[4] = malloc ( 12 * sizeof ( int ) );

第一种初始化形式信息量更大。

【讨论】:

  • 3 * sizeof(a[0])以避免重复4编译时间常数两次
  • 这真的很有用,但是如果我们说在指向数组声明的指针时不要使用 malloc(如问题中所述),尽管我们可以在声明之后的下一行使用它怎么办?正如我们所说的 int *ptr1; ptr1 的数据类型是 int * 和 int **ptr2; ptr2 的数据类型是 int ** ,同样如果有人问 int (*ptr3)[7] 中 ptr3 和 ptr4 的数据类型,我们会怎么说;和 int *ptr4[9];分别?
  • @user231243 您可以首先声明指针,然后在其他语句中为其分配已分配内存的地址。问题是什么?至于ptr1、ptr2等我什么都不懂。
  • 尽管在 C 中对 malloc 的结果进行类型转换并不是一个好习惯。已声明 int (*a)[4];我在这一步很困惑 --> a=(......)malloc(sizeof(int *)) ,用什么代替 "(......)" ?我问的是:-声明 int (*ptr3)[7] 中 ptr3 和 ptr4 的日期类型是什么;和 int *ptr4[9];分别?
  • @user231243 很奇怪的问题。我已经在我的帖子中展示了所有内容。什么不清楚?至于声明 int (*ptr3)[7];和 int *ptr4[9];那么它们分别是指向 int[7] 和 int[9] 类型数组的指针
猜你喜欢
  • 2015-12-10
  • 2013-04-18
  • 2021-04-15
  • 2013-05-26
  • 2013-10-04
  • 1970-01-01
  • 2019-07-12
  • 2015-02-05
  • 1970-01-01
相关资源
最近更新 更多