/*
ca32a_demo_c++创建动态数组20200127
静态是在堆栈上创建的,动态实在堆(heap)上创建的
堆(heap)-自由存储区(free store)-内存的一个区域
c语言:malloc创建和free释放
c++语言:new和delete()
动态数组的定义
初始化动态分配的数组
const对象的动态数组
允许动态分配空数组
动态空间的释放
动态数组的使用
*/
//静态数组,是在堆栈上创建的,局部的自动变量。当main函数结束时,堆栈上的局部的自动变量会自动清除
动态数组有什么作用呢?
https://blog.csdn.net/txwtech/article/details/104094336
/*
ca32a_demo_c++创建动态数组20200127
静态是在堆栈上创建的,动态实在堆(heap)上创建的
堆(heap)-自由存储区(free store)-内存的一个区域
c语言:malloc创建和free释放
c++语言:new和delete()
动态数组的定义
初始化动态分配的数组
const对象的动态数组
允许动态分配空数组
动态空间的释放
动态数组的使用
*/
#include <iostream>
using namespace std;
int main()
{
int a[10];//静态数组,堆栈上创建的
int n;
cout << "您想要多大的数组: " << endl;
cin >> n;
int *p=(int *)malloc(n*sizeof(int)); //c语言:malloc创建和free释放
if (p != NULL)
{
cout << "C语言:malloc创建动态数组成功!" << endl;
}
int *pia = new int[n];
if (pia != NULL)
{
cout << "c++:new创建动态数组成功!" << endl;
}
free(p);//释放c语言创建的动态数组指针
delete[] pia;//删除数组指针
//getchar();
return 0;
}
#include <iostream>
//忘记delete会产生内存泄漏
using namespace std;
class Dog
{
};
int main()
{
int a[] = { 1,2,3,4,5 };//静态数组,是在堆栈上创建的,局部的自动变量。当main函数结束时,堆栈上的局部的自动变量会自动清除
int *pia = new int[10];//没有初始化
string *psa = new string[10];//默认的构造函数初始化
delete[] psa;
Dog *pDog = new Dog[10];
int *pia2 = new int[10]();//内置类型动态初始化为0;
cout << *(pia2 + 2) << endl;
*pia = 9;
*(pia + 1) = 8;
*(pia + 3) = 6;
cout << *(pia + 1) << endl;
cout << *(pia + 3) << endl;
for (int* q = pia; q != pia + 10; ++q)
{
*q = 11;
}
for (int* q = pia; q != pia + 10; ++q)
{
cout << *q << endl;
}
for (int i=0;i<10;i++) //普通循环
{
cout << *(pia+i) << endl;
}
const int *pci_bad = new const int[100]();//后面的小括号进行初始化0,不能修改该,没有什么用处。
//char arr[0];//静态数不能分配0
char *cp = new char[0];//动态数可以分配0
cout << "请输入动态数组的大小: ";
size_t n;
cin >> n;
int *p = new int[n];
for (int *q = p; q!=p + n; ++q)
{
*q = 22;
cout << *q << endl;
}
delete[] p;//忘记delete会产生内存泄漏
delete[] cp;
delete pia2;
delete[] pci_bad;
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
int main()
{
const char *pc = "a very long literal string";
const size_t len = strlen(pc);
for (size_t ix = 0; ix != 8; ++ix)
{
char *pc2 = new char[len + 1];//c语言方式动态创建,处理c风格字符串
strcpy(pc2,pc);
cout << pc2<< endl;
delete[] pc2;
//cout << "PC2:" << endl;
}
string str("a very long literal string");
for (size_t ix = 0; ix != 8; ++ix)
{
string str2 = str;
cout <<"c++: "<< str2 << endl;
//delete[] pc2;
//cout << "PC2:" << endl;
}
return 0;
}