int *p=(int *)malloc(10*sizeof(int));//开辟10个内存空间
int main()
{
int** p = (int **)malloc(3*sizeof(int*));//申请指针数组
for(int i=0; i<3; i++)
{
p[i] = (int*)malloc(4*sizeof(int));//再申请4个内存空间
}
for(int i=0; i<3; i++)
{
for(int j=0; j<4; j++)
{
printf("%p\n", &p[i][j]);//这里根据自己的要求赋值或者打印,赋值和二维数组赋值一样
}
}
for(int i=0; i<3; i++)
{
free(p[i]);//记住要释放内存
}
free(p);//释放两次,两次释放的不一样
return 0;
}
注意:这种方法每一行元素地址连续,但是不能保证上一行的尾和下一行的开头连续
代码如下:✍️
int main()
{
int (*p)[4] = (int(*)[4])malloc(3*4*sizeof(int));
for(int i=0; i<3; i++)
{
for(int j=0; j<4; j++)
{
printf("%p\n", &p[i][j]);
}
}
free(p);
return 0;
}
代码如下:✍️
int main()
{
int *p = (int*)malloc(3*4*sizeof(int));//malloc申请12个内存块
for(int i=0; i<3; i++)
{
for(int j=0; j<4; j++)
{
p[i*4+j] = 1;//注意这里的i*4+j,
printf("%p\n", &p[i*4+j]);
}
}
free(p);
return 0;
}