一.malloc函数利用数组指针创建二维数组
定义形式: int (*p)[4] = (int(*)[4])malloc(3*4*sizeof(int));
注解:1.(*p)指针代表总共有三层(0,1,2),每一层都是一个int*的指针。
2. int (*p)[4]代表每一个int* 指针都指向了四个int类型的空间。
3. 所以总共有12个int类型的空间,构成一个3行4列的二维数组。
#include <stdio.h>
#include <stdlib.h>//malloc函数头文件
#include <string.h>//memcpy函数头文件
// malloc函数利用数组指针创建二维数组的子函数
void fund(int(*p)[4],int i,int j)
{
for(int i = 0;i < 3;i++)
{
for(int j = 0;j < 4;j++)
{
printf("%d\t",p[i][j]);
}
printf("\n");
}
}
int main(int argc, char const *argv[])
{
// malloc函数利用数组指针创建二维数组
int (*p)[4] = (int(*)[4])malloc(3*4*sizeof(int));
int arr[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
memcpy(p,arr,sizeof(arr));
int i,j;
// for(i = 0;i < 3;i++)
// {
// for(j = 0;j < 4;j++)
// {
// printf("%p\t",&p[i][j]);
// }
// printf("\n");
// }
fund(p,i,j);
free(p);
p = NULL;
return 0;
}
二.malloc函数利用双指针创建二维数组
定义形式:
三行: int **ptr1 = (int **)malloc(3*sizeof(int));
四列:ptr1[i] = (int *)malloc(4*sizeof(int));
#include <stdio.h>
#include <stdlib.h>//malloc函数头文件
#include <string.h>//memcpy函数头文件
// malloc利用双指针创建二维数组的子函数
void func(int **ptr,int row,int col)
{
for(int i = 0;i < row;i++)
{
for(int j = 0;j < col;j++)
{
printf("%d\t",ptr[i][j]);
}
printf("\n");
}
}
int main()
{
// malloc利用双指针创建二维数组
// malloc实参是以字节为单位,相当于一维数组
int *ptr = malloc(3*sizeof(int));
for(int i = 0;i < 3;i++)
{
ptr[i] = i;
}
// 将malloc转为二维数组
// 三行
int **ptr1 = (int **)malloc(3*sizeof(int));
for(int i = 0;i < 3;i++)
{
for(int j = 0;j < 4;j++)
{
// 四列
ptr1[i] = (int *)malloc(4*sizeof(int));
}
}
int count = 0;
int i,j;
for(i = 0;i < 3;i++)
{
for(j = 0;j < 4;j++)
{
ptr1[i][j] = count++;
}
}
func(ptr1,i,j);
free(ptr1);
ptr1 = NULL;
return 0;
}
三.malloc函数利用一级指针创建二维数组
定义形式:int *ptr = (int *)malloc(3*4*sizeof(int));
#include <stdio.h>
#include <stdlib.h>//malloc函数头文件
#include <string.h>//memcpy函数头文件
/* 使用malloc利用一级指针创建二维数组 */
void fung(int *ptr,int i,int j)
{
for(int i = 0;i<3;i++)
{
for(int j = 0;j<4;j++)
{
printf("%d\t",ptr[i*4+j]);
}
printf("\n");
}
}
int main(int argc, char const *argv[])
{
// 申请堆空间
int *ptr = (int *)malloc(3*4*sizeof(int));
if(ptr == NULL)
{
printf("error!");
return -1;
}
int i,j;
int count = 0;
// 给二维数组赋值
for(i = 0;i<3;i++)
{
for(j = 0;j<4;j++)
{
ptr[i*4+j] = count++;
}
}
// 调用函数
fung(ptr,i,j);
//用完清空堆空间
free(ptr);
ptr = NULL;
return 0;
}