91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

內存的動態開辟

發布時間:2020-06-26 08:53:13 來源:網絡 閱讀:477 作者:小鎮青苔 欄目:編程語言

在C語言中,對于一些數組的大小有時候我們并不知道需要開辟多大的一塊內存空間,所以這時候我們就需要動態的去開辟一塊內存空間。

C語言中動態開辟內存的函數有malloc、calloc、realloc、釋放內存的函數有free

C++中可以用運算符new來開辟內存,用delete釋放內存。

malloc:

原型:void *malloc(unsigned int num_bytes);

功能:分配長度為num_bytes字節的內存。

返回值:如果分配成功返回指向被分配內存的指針,失敗返回NULL。

calloc:

原型:void *calloc(size_t n, size_t size);

其功能、返回值和calloc一樣。

區別是:malloc分配的空間不初始化,calloc自動初始化為0.

realloc:

原型: void *realloc(void *mem_address, unsigned int newsize);

功能:對原來的空間進行擴大。realloc先判斷當前指針是否有連續的足夠的空間,如果有,擴大當前指針指向的空間,并將原指針返回;如果沒有,先申請一塊擴大后的空間,然后將原來的內存中的數據拷貝到新的內存空間,再釋放原來指針指向的空間,返回新申請空間的指針。

返回值:成功,返回一個申請的空間的指針,失敗,返回NULL。

free:

原型:void free(void *ptr);

功能:釋放由以上函數申請的內存空間,一般和上面的函數配對使用,否則會造成野指針。

int main()
{
	//int *p = (int*)malloc(20);
	int size = 5;
	int *p = (int*)malloc(sizeof(int)*size);
	int *q = (int*)calloc(size,sizeof(int));
	int *p_tmp = p;
	int *q_tmp = q;
	if(p == NULL || q == NULL)
	{
		exit(1);
	}
	for(int i = 0;i<size;i++)
	{
		int n = *p_tmp;
		printf("%d ",n);
		p_tmp++;
	}
	cout<<endl;
	for(int i = 0;i<size;i++)
	{
		int n = *q_tmp;
		printf("%d ",n);
		q_tmp++;
	}
	int *new_p = (int*)realloc(p,sizeof(int)*10);
	if(new_p == NULL)
	{
		exit(1);
	}
	p = new_p;
	free(p);
	free(q);
	system("pause");
	return 0;
}

結果:

內存的動態開辟

new

功能:動態分配空間

delete

功能:釋放空間

用法:

1)int *p = new int;  delete p;

動態開辟sizeof(int)個字節。

2)int *p = new int(n);  delete p;

動態開辟sizeof(int)個字節,并初始化為n。如果n缺省,則初始化為0。

3)int *p = new int[10];  delete[] p;

動態開辟10*sizeof(int)個字節的內存空間。

int main()
{
	int *p = new int(5);
	int *q = new int[10];
	for(int i = 0;i<10;i++)
	{
		q[i] = i;
	}
	printf("p addr:%p\n",p);
	printf("%d\n",*p);
	printf("q addr %p\n",q);
	for(int i = 0;i<10;i++)
	{
		printf("%d ",q[i]);
	}
	delete p;
	delete[] q;
	system("pause");
	return 0;
}

結果:

內存的動態開辟


malloc與new的區別:

1、malloc是C/C++標準庫函數,而new是C++運算符。

2、new和delete在對象創建和消亡時會自動執行構造涵數和析構函數。而malloc則不會。對于一些非內部數據類型來說,顯然用new和delete更合適。

3、new只能用于C++中,C程序則只能用malloc.C++程序兩者都可用。

4、new出來的指針是直接帶類型信息的,而malloc出來的指針都是void*類型的,使用時一般需要強轉。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长丰县| 盐津县| 旅游| 松桃| 屏边| 漳州市| 东兰县| 天峨县| 清流县| 峨边| 东乡县| 宁远县| 花莲市| 常宁市| 陇南市| 呼玛县| 罗江县| 大洼县| 文昌市| 南漳县| 永德县| 思茅市| 弥渡县| 聂拉木县| 伊通| 华亭县| 纳雍县| 惠东县| 吉安县| 兴安盟| 金秀| 梓潼县| 兴宁市| 疏勒县| 沁阳市| 辽中县| 蒲城县| 中西区| 龙门县| 保靖县| 花莲县|