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