指针学习(2)三级指针的应用

一,指针的封装成函数(转入地址的方法)

三级指针的应用 三级指针指向的是二级指针的地址 , 二级指针指向是一级的地址

  1. ((src)+i) 的使用是二级指针指向一级指针的地址

  2. ((*(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;
}

上面是运用指针应用的数组我还没有好的方法, 我下面运用数组的例子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值