一,指针的封装成函数(转入地址的方法)
三级指针的应用 三级指针指向的是二级指针的地址 , 二级指针指向是一级的地址
((src)+i) 的使用是二级指针指向一级指针的地址
((*(arr) + i) +j) 三级指针的指向的是二级指针的地址就是指
/*************************************************************************
> File Name:
> Author: songli
> QQ:2734030745
> Mail: 15850774503@163.com
> Created Time:
************************************************************************/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
/*
数组是二个
1,统计的人数
2,统计的内容的个数
*/
int *subecj;
void begin()
{
printf("-----------------------------------\n");
printf("------------学生统计分析表------------\n");
printf("-----------------------------------\n");
printf("请您依次输入统计的人数和分析的内容的个数格式是(人数,+内容个数)\n");
subecj = (int *)malloc(sizeof(int) * 2);
scanf("%d,%d", subecj[0], subecj[1]);
}
void chen3(int ***arr)
{
int ***src = arr;
//统计的人数
*src = (int **)malloc(sizeof(int *) * subecj[0]);
int i;
//学生姓名
//*(*(src)) = (char **)malloc(sizeof(char**) * 1);
//统计的内容的个数
for (i = 0; i < subecj[1] ; i++)
{
*(*(src)+i) = (int*)malloc(sizeof(int) * subecj[1]);
}
}
void zhi(int ***src)
{
int ***arr = src;
int i, j;
//统计的人数
for (i = 0; i < subecj[0]; i++)
{
//统计的内容的个数
//printf("请输入要姓名:\n");
/*char str[10];
scanf("%s", &str);
*(*(*(arr))) = str;*/
for (j = 0; j < subecj[1]; j++)
{
scanf( "%d", *(*(*(arr)+i) + j));
}
}
}
void my_printf(int ***src)
{
int ***arr = src;
int i, j;
for (i = 0; i < 10; i++)
{
//printf("%s ", *(*(*(arr)+i)));
for (j = 0; j < 10; j++)
{
printf("%d ", *(*(*(arr) + i) +j));
}
printf("\n");
}
}
void Neter_free(int ***src)
{
int ***arr = src;
int i;
for (i = 0; i < 10; i++)
{
if (*(*(arr) + i) != NULL)
{
free(*(*(arr)+i));
*(*(arr)+i) = NULL;
}
}
if (*arr != NULL)
{
free(*arr);
*arr = NULL;
}
}
int main(void)
{
//初始化
begin();
int **arr;
//分配空间
chen3(&arr);
//给空间赋值
zhi(&arr);
//打印空间的值
my_printf(&arr);
//释放内存
Neter_free(&arr);
/*int i;
for (i = 0; i < 10; i++)
{
if (arr[i] != NULL)
{
free(arr[i]);
arr[i] = NULL;
}
}*/
/*if (arr != NULL)
{
free(arr);
arr = NULL;
}*/
printf("释放完成!!!\n");
printf("\n");
system("pause");
return EXIT_SUCCESS;
}
二,不用主函数申请指针函数(返回是一个指针的地址)
在被调函数中开辟内存并把指针的首地址返回
/*************************************************************************
> File Name:
> Author: songli
> QQ:2734030745
> Mail: 15850774503@163.com
> Created Time:
************************************************************************/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int **Buffer_arr()
{
int **arr = (int *)malloc(sizeof(int *) * 3);
int i;
for (i = 0; i < 3; i++)
{
*(arr + i) = (int *)malloc(sizeof(int) * 3);
}
}
int main(int argc, char *argv[])
{
//分配空间
int **arr = Buffer_arr(); //返回二级指针的地址
//给空间赋值
printf("\n");
system("pause");
return EXIT_SUCCESS;
}
上面是运用指针应用的数组我还没有好的方法, 我下面运用数组的例子