数组指针的综合运用代码总结


         由用户指定一个n生成一个n*n的二维数组in heap

创建二维数组:

int createArrayHeap(int ***p,int n);

int **   createArrayHeap(int n);

利用随机数初始化:

Int initArrayHeap(int **p);

打印二维数组:

Int printfArrayHeap(int **p);

释放二维数组:

Int freeArrayHeap(int **p);

Int   freeArrayHeap(int ***p);


具体实现代码:

#include <stdio.h>
#include <stdlib.h>
/*
由用户指定一个n 生成一个n*n的二维数组in heap
int createArrayHeap(int ***p,int n);
int **   createArrayHeap(int n);
利用随机数初始化
Int initArrayHeap(int  **p);
打印二维数组
Int printfArrayHeap(int **p);
释放二维数组
Int freeArrayHeap(int **p);
Int freeArrayHeap(int ***p);


*/
int createArrayHeap(int ***p, int n)
{
if (p == NULL || n <= 0)
return -1;
int **tmp = NULL; //copy


int  i = 0, j = 0;
tmp = (int **)malloc(sizeof(int*)*n);
for (; i<n; ++i)
{
tmp[i] = (int *)malloc(sizeof(int)*n);
for (j = 0; j<n; ++j)
{
tmp[i][j] = rand() % 9000 + 1000;
}
}
*p = tmp;     //commit
return 0;
}
int **   createArrayHeap1(int n)
{
if (n <= 0)
return NULL;
int **tmp = NULL; //copy
int  i = 0, j = 0;
tmp = calloc(sizeof(int*), n);
for (; i<n; ++i)
{
tmp[i] = calloc(sizeof(int), n);
//memset
for (j = 0; j<n; ++j)
{
tmp[i][j] = rand() % 9000 + 1000;
}
//memset(tmp[i],0,sizeof(int)*n);
}
return tmp;
}
int printfArrayHeap(int **p, int n)
{
int i = 0, j = 0;
for (; j<n; ++j)
{
for (i = 0; i <n; ++i)
{
printf("%d ", p[j][i]);
}
printf("\n");
}
}
int freeArrayHeap(int **p, int n)
{
int i = 0;
for (; i<n; ++i)
{
free(p[i]);
}
free(p);


return 0;
}
int freeArrayHeap1(int ***p1, int n)
{
int **p = *p1;
int i = 0;
for (; i<n; ++i)
{
free(p[i]);
}
free(p);
*p1 = NULL;
return 0;
}
int main(int argc, char **argv)
{
int **p = NULL;  //迷途指针  跟丢了
int n = 8;
//p = createArrayHeap1(n);
createArrayHeap(&p, n);


printfArrayHeap(p, n);
freeArrayHeap(p, n);
printfArrayHeap(p, n);
//p = createArrayHeap1(n);
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值