#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数组呢?
发布于 2017-04-03 08:52:16
这是一个完全多余的演员,只会增加杂乱。或者在C++的情况下,它是必要的,但您不应该在C++中使用malloc .
p是指向int [3]类型数组的数组指针。*p是一个数组,因此3*sizeof(*p)给出了3个这样的数组的大小,即3*3*sizeof(int)。因此,代码分配一个数组-一个2D数组。
p设置为指向该数组的第一个元素。p[i]是数组指针上的指针算法,并给出数组号i。因此,指向一维数组的指针可用于访问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;
}发布于 2017-04-03 08:42:58
malloc是一个命令,它根据所需数据的大小(以字节为单位)分配一个内存块。在这种情况下,您试图为大小为3的整数数组分配一个内存块,同时sizeof()是一种获取实际字节大小的方法,内存大小将用于数据类型,在这种情况下,数据类型是整数。因为您需要一个大小为3的数组,这就是为什么3乘法器来了,并且比您希望的那样将其作为指针类型转换到一个整数数组中,其大小为3,以便稍后使用。
https://stackoverflow.com/questions/43180061
复制相似问题