C与C++申请堆内存的不同

C 没有关键字可以申请堆内存,只提供了一些库函数如malloc、calloc、realloc等。而C++提供了一个一系列新的关键字来处理堆内存,那就是new和delete,下面示例代码分别编写了C和C++各种申请内存的方式。

#if __cplusplus
#include <iostream>
using namespace std;
#else
#include <stdio.h>
#include <stdlib.h>
#endif
 
 
int main(int argc, char* argv[])
{
#if __cplusplus
	// 申请单变量,可直接使用小括号初始化
	int* p = new int(5);
	// 申请数组
	int* pa = new int[10];
	// 申请指针数组
	char **pp = new char*[5];
	// 申请一个两行三列的数组指针
	int (*pAp)[3] = new int[2][3];
 
	// 释放单个变量空间
	// 释放数组变量空间,无论数据纬度是多少,都只需要一个[]
	delete p;
	delete [] pa;
	delete pp;
	delete pAp;
#else
	// 申请单变量
	int* p = (int*)malloc(sizeof(int));
	printf("%d\n", *p);
	// 申请数组
	int* pa = (int*)malloc(sizeof(int) * 10);
	// 申请指针数组
	char **pp = (char**)malloc(sizeof(char*) * 5);
 
	// 无论单变量还是数组等,均传递首地址即可
	free(p);
	free(pa);
	free(pp);
#endif
 
#if __cplusplus
	getchar();
#else
	system("pause");
#endif
 
	return 0;
}

发表评论