欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

若有如下定義

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

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

char *tmp = NULL;

如果要打印這個(gè)數(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"};

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

在使用的時(shí)候,若要使用中間量操作元素,那么此時(shí)中間量應(yīng)該定義為

char tmp[5] = { 0 };

如果要打印這個(gè)數(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);

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

在使用的時(shí)候,若要使用中間量操作元素,那么此時(shí)中間量應(yīng)該定義為

char *tmp = NULL

如果要打印這個(gè)數(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ù)排序,運(yùn)算結(jié)果放到第三種內(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ù)錯(cuò)誤\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)存分配錯(cuò)誤!\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語(yǔ)言-二級(jí)指針三種內(nèi)存模型的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言-二級(jí)指針三種內(nèi)存模型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入淺析C++ traits技術(shù)

    深入淺析C++ traits技術(shù)

    traits就是提取“被傳進(jìn)的對(duì)象”對(duì)應(yīng)的返回類型,讓同一個(gè)接口實(shí)現(xiàn)對(duì)應(yīng)的功能。因?yàn)镾TL的算法和容器是分離的,兩者通過(guò)迭代器鏈接,本文通過(guò)實(shí)例代碼給大家介紹C++ traits技術(shù),感興趣的朋友一起看看吧
    2021-05-05
  • C++實(shí)現(xiàn)十大排序算法及排序算法常見(jiàn)問(wèn)題

    C++實(shí)現(xiàn)十大排序算法及排序算法常見(jiàn)問(wèn)題

    法是程序的靈魂,無(wú)論學(xué)習(xí)什么語(yǔ)言,做什么工程項(xiàng)目,都要考慮算法的效率實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于C++實(shí)現(xiàn)十大排序算法及排序算法常見(jiàn)問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 用C語(yǔ)言完整實(shí)現(xiàn)2048游戲

    用C語(yǔ)言完整實(shí)現(xiàn)2048游戲

    2048是一款數(shù)字益智游戲,初始數(shù)字則是由2+2組成的基數(shù)4。在操作方面的不同則表現(xiàn)為一步一格的移動(dòng),變成更為爽快的一次到底。相同數(shù)字的方?jīng)r在靠攏、相撞時(shí)會(huì)相加。系統(tǒng)給予的數(shù)字方塊不是2就是4,玩家要想辦法在這小小的16格范圍中湊出2048這個(gè)數(shù)字方塊
    2021-11-11
  • 深入理解堆排序及其分析

    深入理解堆排序及其分析

    本篇文章是對(duì)堆排進(jìn)行了詳細(xì)的分析以及介紹,需要的朋友參考下
    2013-05-05
  • C語(yǔ)言實(shí)現(xiàn)騎士飛行棋小游戲

    C語(yǔ)言實(shí)現(xiàn)騎士飛行棋小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)騎士飛行棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C語(yǔ)言 指針數(shù)組詳解及示例代碼

    C語(yǔ)言 指針數(shù)組詳解及示例代碼

    本文主要介紹C語(yǔ)言 指針數(shù)組,這里提供詳細(xì)的資料和簡(jiǎn)單示例代碼以便大家學(xué)習(xí)參考,有需要學(xué)習(xí)的小伙伴可以參考下
    2016-08-08
  • 使用c語(yǔ)言判斷100以內(nèi)素?cái)?shù)的示例(c語(yǔ)言求素?cái)?shù))

    使用c語(yǔ)言判斷100以內(nèi)素?cái)?shù)的示例(c語(yǔ)言求素?cái)?shù))

    這篇文章主要介紹了使用c語(yǔ)言判斷100以內(nèi)素?cái)?shù)的示例(c語(yǔ)言求素?cái)?shù)),需要的朋友可以參考下
    2014-03-03
  • 帶你了解C++中vector的用法

    帶你了解C++中vector的用法

    大家好,本篇文章主要講的是帶你了解C++中vector的用法,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 五個(gè)經(jīng)典鏈表OJ題帶你進(jìn)階C++鏈表篇

    五個(gè)經(jīng)典鏈表OJ題帶你進(jìn)階C++鏈表篇

    做題之前呢,小編想提醒下大家,要三思而后行,不要一上來(lái)就嘎嘎敲代碼,要先學(xué)會(huì)自己畫圖分析,把自己的思路捋清楚,不要到時(shí)候?qū)懘a五分鐘,調(diào)試兩小時(shí),記住,編程思路很重要
    2022-03-03
  • C語(yǔ)言找出數(shù)組中的特定元素的算法解析

    C語(yǔ)言找出數(shù)組中的特定元素的算法解析

    這篇文章主要介紹了C語(yǔ)言中找出數(shù)組中特定元素的算法解析,包括找出數(shù)組中兩個(gè)只出現(xiàn)一次的數(shù)字的方法,需要的朋友可以參考下
    2016-03-03

最新評(píng)論