zoukankan      html  css  js  c++  java
  • c语言二级指针内存模型

    第一种: 指针数组作为输入参数

    char *myArray[] = {"aaaaaa", "ccccc", "bbbbbb", "111111"};//指针数组,数组中的每个元素都是指针,
    int num = 4;

     

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

      正确地调用方法:

    printMyArray11(myArray, num);
    

      

      

     

    第二种 : 二级指针作输入---内存模型(分配内存块已知的情况)

    char myArray[10][30] = {"aaaaaa", "ccccc", "bbbbbbb", "1111111111111"};
    int num =4;

    作为如下函数的实参,不能实现功能,

    //错误调用方法:
    void printMyArray02_err(char **myArray, int num) { int i = 0; for (i=0; i<num; i++) { //printf("%s ", myArray[i]); printf("%s ", *(myArray+i) ); // } }
    正确调用方法:
    void printMyArray02(char myArray[10][30], int num)
    {
    	int i = 0;
    	for (i=0; i<num; i++)
    	{
    		//printf("%s 
    ", myArray[i]);
    		printf("%s 
    ", *(myArray+i) );  //
    	}
    }
    

     理由:指针步长不一样,指针所指向的内存空间的数据类型不一样。

     

      第三种内存模型:通过堆进行分配内存

    //在主函数中进行变量的定义(如下)
    char ** p2 =NULL;	
    
    //定义子函数
    char **GetMem(int num)
    {
    	int i = 0;
    	char **p2 = NULL;
    	p2 = (char **)malloc(sizeof(char *) * num);
    	if (p2 == NULL)
    	{
    		return NULL;
    	}
    
    	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;
    }
    
    //主函数中调用
    p2 = GetMem(num);
    
    //操作完之后一定要调用如下的释放内存函数进行释放
    void GetMemFree(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);
    	}
    }
    

     二级指针的三种内存模型如下所示:

  • 相关阅读:
    Python格式化输出%s和%d
    操作数据库
    协议类介绍
    并发和并行和压测 、对带宽的理解解释
    悠悠大神的 并发当前目录下所有文件的方法(还没试过)
    post参数的方法 json data 和特别的传参
    接口测试简介
    appium的三种等待方式 (还没实践过,记录在此)
    人生进步目标
    保持一个会话 添加 HTTP Cookie管理器
  • 原文地址:https://www.cnblogs.com/hai5111/p/10353240.html
Copyright © 2011-2022 走看看