二级指针做输入的第三种内存模型:手工打造二维内存

Posted fengxing999

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二级指针做输入的第三种内存模型:手工打造二维内存相关的知识,希望对你有一定的参考价值。

声明局部变量p, p指向一段内存地址,这段内存地址存放这N个指针,每个指针都指向malloc的另一段内存。

内存模型图如下:

技术分享图片

p应该是二级指针

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<ctype.h>

char**getMem(int num)
{

  int i = 0, j = 0;
  char** p2 = NULL;
  if (p2 == NULL)
  {
    return NULL;
  }
  p2 = (char**)malloc(sizeof(char*)*num);
  for (i = 0; i < num; i++)
  {
    p2[i] = (char*)malloc(sizeof(char) * 100);//相当于 char buf[100];
    sprintf(p2[i], "%d%d%d", i + 1, i + 1, i + 1);//向内存空间中打印数据
  }

  return p2;
}

//打印
void printMyArray03(char**myArray, int num)
{
  int i = 0;
  for (i = 0; i < num; i++)
  {
    printf("%s ", myArray[i]);// printf("%s ", *(myArray+i));
  }
}


//排序 交换指针
void sortMyArray03(char**myArray, int num)
{
  int i = 0, j = 0;
  char*tmp = NULL;
  for (i = 0; i < num; i++)
  {
    for (j = i + 1; j < num; j++)
    {
      if (strcmp(myArray[i], myArray[j]) > 0)//前面的大 交换
      {
        //交换的指针指向
        tmp = myArray[i]; //注意 交换的是数组元素 交换的是指针的值 //改变指针的指向
        myArray[i] = myArray[j];
        myArray[j] = tmp;
      }
    }
  }
}

//释放
void getMem03_Free(char**p2, int num)
{
  int i = 0;
  for (i = 0; i < num; i++)
  {
    if (p2[i] != NULL)
    {
      free(p2[i]);
      p2[i] = NULL;
    }
  }

  if (p2 != NULL)
  {
    free(p2);
    p2 = NULL;
  }

}
void main()
{
  int i = 0, j = 0;
  char** p2 = NULL;
  char*tmp;
  char tmpbuf[100];
  int num = 5;
  p2 = getMem(num);

  //打印
  printMyArray03(p2, num);

  //排序
  //交换指针指向
  sortMyArray03(p2, num);

  printMyArray03(p2, num);

  //释放内存 先申请的后释放
  getMem03_Free(p2, num); //释放完后 实参main函数的p2还是一个野指针

  if (p2 != NULL)
  {
    free(p2);
    p2 = NULL;
  }

  printf(" hehhe");
  system("pause");
  return;
}

 















































































以上是关于二级指针做输入的第三种内存模型:手工打造二维内存的主要内容,如果未能解决你的问题,请参考以下文章

二级指针做函数的输入与输出

C 语言二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )

C语言提高内容目录

C 语言二级指针作为输入 ( 自定义二级指针内存 | 为 二级指针 分配内存 - 存放 一维指针 | 为每个 一级指针 分配内存 | 释放二维指针内存 )

C 语言二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 通过 交换指针指向的内存数据 方式进行排序 )

二级指针的三种内存模型