什么是p =(int(*)[3])malloc(3 * sizeof(* p))的含义;

时间:2017-04-03 08:39:46

标签: c arrays pointers

#include<stdio.h>
#include<stdlib.h>

int main()
{
     int i, j;
     int(*p)[3];
     p = (int(*)[3])malloc(3*sizeof(*p));
     for(i=0; i<3; i++)
     {
         for(j=0; j<3; j++)
             printf("%d", p[i][j]);
     }
     return 0;
}

p是一个指向3整数数组的指针,然后它表现为2D数组的原因

2 个答案:

答案 0 :(得分:2)

这是一个完全多余的演员,只会增加杂乱。或者在C ++的情况下需要它,但你永远不应该在C ++中使用malloc ......

p是指向int [3]类型数组的数组指针。 *p是一个数组,因此3*sizeof(*p)给出了3个这样的数组3*3*sizeof(int)的大小。因此代码分配了一个数组 - 一个2D数组。

p设置为指向该数组的第一个元素。 p[i]是数组指针上的指针算术,并为您提供数组编号i。因此,可以使用指向1D数组的指针来访问2D数组。

编写malloc调用的更好方法是:

p = malloc( sizeof(int[3][3]) );

您的示例永远不会初始化数组,因此打印其内容会产生垃圾和可能未定义的行为。更正后的代码:

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
     int(*p)[3];
     p = malloc( sizeof(int[3][3]) );
     for(size_t i=0; i<3; i++)
     {
         for(size_t j=0; j<3; j++)
         {
             p[i][j] = (int)j;
             printf("%d ", p[i][j]);
         }
         printf("\n");
     }

     free(p);
     return 0;
}

相关主题:Correctly allocating multi-dimensional arrays

答案 1 :(得分:-1)

malloc是一个根据所需数据大小(以字节为单位)分配内存块的命令。 在这种情况下,您尝试为大小为3的整数数组分配一块内存。 同时sizeof()是获取实际字节大小的内存的方法,用于数据类型,在这种情况下是一个整数。并且因为你需要一个大小为3的数组,这就是3乘法器的原因 并且你想要将强制类型转换为指向大小为3的整数数组的指针,以便稍后使用