使用数组声明来创建数组时,将采用静态联编,及数组的长度在编译时设置
int tacos[10];
使用new[ ];运算符创建数组时,将采用动态联编(动态数组),即在运行时为数组分配空间,其长度也将在运行时设置。
使用完这种数组后,应使用 delete[] 释放其占用的内存:
int size ;
cin >> size;
int * pz = new int [size];
……
delete pz [];
8、数组表示法和指针表示法
使用方括号数组表示法等同于对指针接触引用:
tacos [0] 在 tacos 地址的值
tacos [3] 在tacos + 3 地址的值
对于指针和数组名,既可以使用指针表示法,也可以使用数组表示法:
int* pt = new int [10]
*pt = 5; //set element number 0 to 4
pt [0] = 6; //set element number 0 to 6
pt [9] = 44; //set tenth element (element number 9) to 44
int coats [10];
*(coats + 4) = 12; //set coats [4] to 12
/*
分配内存: new 数据类型(数据)
接触内存: delete 地址
*/
9、new操作符为指针申请内存空间与delete释放内存
/*
分配内存: new 数据类型(数据)
解除内存: delete 地址
*/
#include<iostream>
#include<cmath>
using namespace std;
//new 的基本语法
int len;
int* func()
{
//在堆区创建整形数据
//new 返回 该数据类型的指针
int* p = new int(10);
return p;//返回指针
}
void ShowValue()
{
int* p = func();
cout << *p << "\t" << p << endl;
delete p; //释放指针 p 指向的空间 ,之后 指针 p 成为了一个野指针
//cout << *p << "\t" << p << endl; //非法操作
}
int* func1()
{
//动态数组
cin >> len;
int* arr = new int[len]; //向内存申请len个内存空间 arr 接收内存的首个地址
return arr; //返回首个内存地址;
}
void ShowArray()
{
int* arr = func1(); // 接收内存
for (int i = 0; i < len; i++)
{
arr[i] = i;
}
for (int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
delete[] arr; //释放内存
/*for (int i = 0; i < 10; i++)
{
cout << arr[i] << " ";
}*/ //非法操作
}
int main()
{
ShowValue();
ShowArray();
system("pause");
return 0;
}