• 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);
    	}
    }
    

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

  • 相关阅读:
    词频统计
    时事点评-红芯浏览器事件
    我的第一篇博客
    浏览器同源策略,及跨域解决方案
    进击的 JavaScript (八) 之 继承
    进击的 JavaScript (七) 之 原型链
    进击的 JavaScript(五) 之 立即执行函数与闭包
    进击的 JavaScript(六) 之 this
    进击的 JavaScript(四) 之 闭包
    进击的 JavaScript(三) 之 函数执行过程
  • 原文地址:https://www.cnblogs.com/hai5111/p/10353240.html
Copyright © 2020-2023  润新知