亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解C語言-二級指針三種內(nèi)存模型

 更新時間:2020年06月09日 11:52:40   作者:cj5785  
這篇文章主要介紹了詳解C語言-二級指針三種內(nèi)存模型的相關知識,文中代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下

二級指針相對于一級指針,顯得更難,難在于指針和數(shù)組的混合,定義不同類型的二級指針,在使用的時候有著很大的區(qū)別

第一種內(nèi)存模型char *arr[]

若有如下定義

char *arr[] = {"abc", "def", "ghi"};

這種模型為二級指針的第一種內(nèi)存模型,在理解的時候應該這樣理解:定義了一個指針數(shù)組(char * []),數(shù)組的每個元素都是一個地址。
在使用的時候,若要使用中間量操作元素,那么此時中間量應該定義為

char *tmp = NULL;

如果要打印這個數(shù)組,那么可以使用以下函數(shù)

int printAarray(char **pArray, int num)
{
	int i = 0;
	if (pArray == NULL)
	{
		return -1;
	}
	for (i = 0; i < num; i++)
	{
		printf("%s \n", pArray[i]);
	}
	return 0;
}

第二種內(nèi)存模型char arr[][]

若有如下定義

char arr[3][5] = {"abc", "def", "ghi"};

這種模型為二級指針的第二種內(nèi)存模型,在理解的時候應該這樣理解:定義了一個二維數(shù)組,有3個(5個char)空間的存儲變量。

在使用的時候,若要使用中間量操作元素,那么此時中間量應該定義為

char tmp[5] = { 0 };

如果要打印這個數(shù)組,那么可以使用以下函數(shù)

nt printAarray(char pArray[][5], int num)
{
	int i = 0;
	if (pArray == NULL)
	{
		return -1;
	}
	for (i = 0; i < num; i++)
	{
		printf("%s \n", pArray[i]);
	}
	return 0;
}

第三種內(nèi)存模型char **arr

若有如下定義

char **arr = (char *)malloc(100 * sizeof(char *));//char arr[400]
arr[0] = (char *)malloc(100 * sizeof(char));//char buf[100]
arr[1] = (char *)malloc(100 * sizeof(char));
arr[2] = (char *)malloc(100 * sizeof(char));
strcpy(arr[0], "abc");
strcpy(arr[1], "def");
strcpy(arr[2], "ghi");
···
for(int i = 0; i < 3; i++)
 if(arr[i] != NULL)
  free(arr[i]);
free(arr);

這種模型為二級指針的第二種內(nèi)存模型,在理解的時候應該這樣理解:定義了一個二級指針,二級指針就是指向指針的指針,其實就是開辟了100個指針空間,存放了100個地址。這種寫法是第一種的簡化寫法

在使用的時候,若要使用中間量操作元素,那么此時中間量應該定義為

char *tmp = NULL

如果要打印這個數(shù)組,那么可以使用以下函數(shù)

{
	int i = 0;
	if (pArray == NULL)
	{
		return -1;
	}
	for (i = 0; i < num; i++)
	{
		printf("%s \n", pArray[i]);
	}
	return 0;
}

例子

把第一種內(nèi)存模型的數(shù)據(jù)排序,運算結果放到第三種內(nèi)存模型中

#include "stdio.h"
#include "string.h"
#include "stdlib.h"

char **SortArrayAndGen3Mem(const char ** const myArray1, int num, char *str, int *myNum)
{
	char **p = NULL;
		p= (char **)malloc(num*sizeof(char *));
	if (myArray1==NULL || str==NULL|| myNum==NULL)
	{
		printf("傳入?yún)?shù)錯誤\n");
		p = NULL;
		goto END;
	}
	*myNum = num;
	for (int i = 0; i < num;i++)
	{
		p[i] = NULL;
		p[i] = (char)malloc(50 * sizeof(char));
		memset(p[i], 0, sizeof(p[i]));
		if (p[i]==NULL)
		{
			printf("內(nèi)存分配錯誤!\n");
			goto END;
		}
		strcpy(p[i], myArray1[i]);
	}
	char *tmp;
	for (int i = 0; i < num; i++)
	{
		for (int j = i + 1; j < num; j++)
		{
			if (strcmp(p[i],p[j])>0)
			{
				char *tmp = p[i];
				p[i] = p[j];
				p[j] = tmp;
			}
		}
	}
	for (int i = 0; i < num; i++)
	{
		printf("%s \n", myArray1[i]);
	}

END:
	return p;
}

//釋放內(nèi)存函數(shù)

void main()
{
	int i = 0;
	char **myArray3 = NULL;
	int num3 = 0;
	//第一種內(nèi)存模型
	char *myArray[] = {"bbbbb", "aaaaa", "cccccc"};
	char *myp = "111111111111";

	myArray3 = SortArrayAndGen3Mem(myArray, 3, myp, &num3);

	for (i=0; i<num3; i++)
	{
		printf("%s \n", myArray3[i]);
	}

	system("pause");
}
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

char **SortArrayAndGet3Mem(const char* const myArray1,int num,char *str,int *myNum);
int getArray(char ***newp,int num) ;
int freeArray(char ***newpfree,int num);
int sortTArray(char *p, int num);

void main()
{
	char **myArray3=NULL;
	int num3=0;
	char *myArray[]={"bbbb","aaa","cccc"};
	char *myp="111111111";
	myArray3=SortArrayAndGet3Mem(myArray,3,myp,&num3);
	system("pause");
}


char **SortArrayAndGet3Mem(const char** const myArray1,int num,char *str,int *myNum)
{
	int ret=0;
	char **p=NULL;
	int i=0;
	char **p1=NULL;
	p1=(char **)myArray1;
	ret=getArray(&p,num +1);
	for (i=0;i<num;i++)
	{
		strcpy(p[i],p1[i]);
	}
	strcpy(p[i], str);
	ret=sortTArray(p,num +1);
	for (i=0;i<num +1;i++)
	{
		printf("%s\n",p[i]);
	}
	ret=freeArray(&p,num +1);
	*myNum = num +1;
	return p;
}

int getArray(char ***newp,int num) 
{
	int i=0;
	int ret=0;
	char **tmp = NULL;
	tmp = (char **)malloc(num*sizeof(char *));
	for (i=0;i<num;i++)
	{
		tmp[i]=(char*)malloc(sizeof(char)*100);
	}
	*newp = tmp; //
	return 0;
}

//
int freeArray(char ***newpfree,int num)
{
	char **p=NULL;
	int i=0;
	int ret=0;
	p=*newpfree;
	for (i=0;i<num;i++)
	{
		free(p[i]);
	}
	free(p);
	*newpfree = NULL; //
	return ret;
}

//int sortTArray(char ***Arraystr, int num)
int sortTArray(char **Arraystr, int num)
{
	int i , j = 0; 
	for (i=0; i<num; i++)
	{
		for (j=i+1; j<num; j++)
		{
			if (strcmp((Arraystr)[i],(Arraystr)[j])>0)
			{
				char tmp[100];
				strcpy(tmp,(Arraystr)[i]);
				strcpy((Arraystr)[i],(Arraystr)[j]);
				strcpy((Arraystr)[j],tmp);
			}
		}
	}
	for (i=0;i<num;i++)
	{
		printf("%s\n",(Arraystr)[i]);
	}
	return 0;
}

以上就是詳解C語言-二級指針三種內(nèi)存模型的詳細內(nèi)容,更多關于C語言-二級指針三種內(nèi)存模型的資料請關注腳本之家其它相關文章!

相關文章

  • C++封裝遠程注入類CreateRemoteThreadEx實例

    C++封裝遠程注入類CreateRemoteThreadEx實例

    這篇文章主要介紹了C++封裝遠程注入類CreateRemoteThreadEx實例,詳細講述了注入DLL到指定的地址空間以及從指定的地址空間卸載DLL的方法,需要的朋友可以參考下
    2014-10-10
  • C++模版函數(shù)詳解

    C++模版函數(shù)詳解

    C++中的模版總體可以分為兩大類:模版函數(shù)、模版類。本篇文章先寫模版函數(shù),需要的朋友可以參考下
    2017-02-02
  • C++實現(xiàn)LeetCode(160.求兩個鏈表的交點)

    C++實現(xiàn)LeetCode(160.求兩個鏈表的交點)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(160.求兩個鏈表的交點),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 基于C++中常見內(nèi)存錯誤的總結

    基于C++中常見內(nèi)存錯誤的總結

    本篇文章是對C++中常見的內(nèi)存錯誤進行了總結介紹。需要的朋友參考下
    2013-05-05
  • C++學習之指針的使用詳解

    C++學習之指針的使用詳解

    這篇文章主要為大家詳細介紹了C++中指針的相關知識,文中的示例代碼講解詳細,對我們的學習或工作有一定的價值,感興趣的小伙伴可以了解一下
    2023-03-03
  • C++語義copy and swap示例詳解

    C++語義copy and swap示例詳解

    這篇文章主要為大家介紹了C++語義copy and swap示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • C++ 回調(diào)接口設計和二進制兼容詳細

    C++ 回調(diào)接口設計和二進制兼容詳細

    再開發(fā)視頻編輯 SDK,SDK的回調(diào)接口設計成 C 風格,結構中放著一些函數(shù)指針,既然對外接口是 C++,為什么不直接使用 C++ 的虛函數(shù)?這篇文章便對這一問題做個詳細介紹,需要的朋友可以參考一下
    2021-09-09
  • 一文弄懂C語言EOF

    一文弄懂C語言EOF

    在 C語言中,EOF 是一個宏定義,EOF 常常用于文件的輸入輸出中,當讀取到文件結束時,會返回 EOF,本文就詳細的介紹一下具體使用方法,感興趣的可以一起來了解一下
    2023-05-05
  • Qt開發(fā)實現(xiàn)跨窗口信號槽通信

    Qt開發(fā)實現(xiàn)跨窗口信號槽通信

    這篇文章主要為大家詳細介紹了Qt開發(fā)實現(xiàn)跨窗口信號槽通信,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++ primer類的基礎精講

    C++ primer類的基礎精講

    C++類,是指系統(tǒng)在第一次在程序中遇到一個類時為這個類建立它的所有類變量的拷貝 - 這個類的所有實例共享它的類變量
    2022-07-07

最新評論