六、申请动态内存
- 基本比较:
尽管上表中体现c++中申请动态动态内存的方法时new,但是malloc在c++中依然可用。
然而在c++里区别于c语言的方法,在c语言中时无法使用的。 - 实例体现:
1)、c语言中用malloc申请动态内存:
int main()
{
一维数组 int 10
int *arr = (int *)malloc(sizeof(int)* 10);
assert(NULL != arr);
for (int i = 0; i < 10; i++)
{
arr[i] = i;
printf("%d ",arr[i]);
}
printf("\n");
free(arr);
int *p = (int *)malloc(sizeof(int)* 1);
assert(NULL != p);
*p = 10;
printf("%d \n", *p);
free(p);
//二维数组,5*5 申请释放
int **arr1 = (int**)malloc(sizeof(int *)* 5);//申请可以存放五个指针的指针数组
assert(NULL != arr1);
for (int i = 0; i < 5; i++)
{
arr1[i] = (int*)malloc(sizeof(int)* 5);//申请长度为5的数组
assert(NULL != arr1[i]);
}
for (int i = 0; i < 5; i++)//向数组中存放数据
{
for (int j = 0; j < 5; j++)
{
arr1[i][j] = i + j;
}
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
printf("%d ", arr1[i][j]);
}
printf("\n");
}
for (int i = 0; i < 5; i++)//释放内存
{
free(arr1[i]);
}
free(arr);
return 0;
}
2)、c++中new申请动态内存:
int main()
{
int *p = new int(int());
*p = 10;
cout << *p << endl;
delete p;//释放单个变量
int *arr = new int[10];//一维数组申请
for (int i = 0; i < 10; i++)
{
arr[i] = i;
cout << arr[i] << endl;
}
delete[]arr;//释放一维数组
//二维数组 5*5 申请释放
int **arr1 = new int*[5];//申请长度为5的指针数组
for (int i = 0; i < 5; i++)
{
arr1[i] = new int[5];//申请长度为5的数组
}
for (int i = 0; i < 5; i++)//向数组中存入数据
{
for (int j = 0; j < 5; j++)
{
arr1[i][j] = i + j;
}
}
for (int i = 0; i < 5; i++)//打印数组中的数据
{
for (int j = 0; j < 5; j++)
{
cout << arr1[i][j] << " ";
}
cout << endl;
}
for (int i = 0; i < 5; i++)//释放内存
{
delete[]arr1[i];
}
delete[]arr1;
return 0;
}
七、自定义类型
- 基本比较
2、实例:
以c++为例,在自定义类型里边允许存在成员变量,也允许存在成员方法。
struct stack
{
int *_arr;
int _top;
int _len;
void init()
{
_top = 0;
_len = 10;
_arr = new int[10];
}
void push(int val);
void pop();
int top();
void destroy();
bool isEmpty();
void resize();
};