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

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

  • 相关阅读:
    vim复制
    嵌入式Linux学习(二)
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1025 数的划分
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
  • 原文地址:https://www.cnblogs.com/hai5111/p/10353240.html
Copyright © 2011-2022 走看看