研一寒假02-指针_new分配内存_使用new来创建动态数组_使用动态数组_使用delete来释放new分配的内存
#---------------------------------指针-----------------------------------#
#include <iostream>
int main()
{
using namespace std;
/* 指针引入 */
int updates = 6; //声明一个变量
int* p_updates; //声明一个指针p_updates,该指针指向一个地址
p_updates=&updates; //将updates的地址赋给p_updates
cout<<"Address:updates= "<<&updates<<endl; //显示变量updates的地址
cout<<"Address:p_updates= "<<p_updates<<endl; //由于p_updates本身就是地址,所以此处不用再加地址符& 以上两行显示同一个地址
*p_updates=*p_updates+1; //指针(地址)p_updates所指向的值加1,*p_updates和updates是完全等价的.所以这一句将会修改指针p_updates指向的值updates
cout<<"Now updates= "<<updates<<endl; //此时updates的值为7
//int型变量updates和指针变量p_uodates只不过是同一枚硬币的两面,变量updates表示值,并使用&来获取地址;而变量p_updates表示地址,并使用*来获取值
//可以将值赋给*p_updates,这样做将会修改指向的值,即updates
/* 指针声明时的注意 */
int *p1; //可以这样声明
int* p2; //这样也可以,int*是一种复合类型强调的是指向int的指针,在哪里添加空格对编译器没有任何区别
int* p3,p4; //声明指针变量p1和int型变量p2
int higgens=5;
int* pt5 = &higgens; //在声明中初始化指针
/* new分配内存 */
int* pt6; //声明一个指针pt6
//pt6 = 0xB8000000; //在自己的理解中会认为0xB8000000是一个偏移地址,但是编译器却会认为这是一串数字,所以将数字赋给指针(地址)会报错
//报错解决方法一:使用强制转换
pt6 = (int*)0xB8000000; //有效,使用int*进行强制转换,将0xB8000000强制转换为地址
//报错解决方法二:使用new关键字去给指针分配内存地址
int* pt7 = new int; //new关键字的作用是在程序运行时,寻找一块适合存储int的内存,并返回一个地址赋给pt7*****
*pt7 = 1001; //有效,这样就可以直接给*pt7直接赋数字值*****
/* 使用delete来释放new分配的内存 所以new和delete必须是成对出现的 */
double* ps = new double;
*ps = 6;
delete ps; //释放ps所指向的内存,但不会删除指针,且只可释放一次
int jugs=6; //有效,声明一个int型变量jugs并赋初值
int* pq=&jugs; //有效,将jugs的地址赋给指针pq
//delete pq; //无效,delete是来释放new分配的内存的
/* 使用new来创建动态数组 */
//静态联编:数组在编译时加入到程序中,在编写程序时候指定数组长度
//动态联编:在程序运行阶段,如果需要数组,则创建它;如果不需要则不创建;还可以在程序运行时选择数组长度。这种数组被称为动态数组
int* psome=new int [10]; //创建一个包含十个元素的动态数组,new返回数组第一个元素的地址并赋给psome
delete [] psome; //当程序使用new分配内存时,应使用delete来释放内存,[]告诉程序应释放整个数组
//当使用new时带[],那么在使用delete时候也应使用[]
//当使用new时不带[],那么在使用delete时候也应不使用[]
/* 使用动态数组 */
int* psome2=new int [10]; //创建包含十个元素的动态数组,psome2指向第一个元素的地址
cout<<psome[0]<<endl; //输出动态数组的第一个元素
cout<<psome[1]<<endl; //输出动态数组的第二个元素
cout<<psome[2]<<endl; //输出动态数组的第三个元素
double* pw = new double [3]; //创建包含三个元素的动态数组
pw[0]=0.12;
pw[1]=0.22;
pw[3]=0.32;
cout<<"pw[1] is "<<pw[1]<<endl; //输出pw[1] is 0.22
pw = pw+1; //在未执行该句之前,pw指向第一个元素的地址,执行此句后pw将指向下一个元素的地址;此时pw不再执行数组第一个元素的地址,而是指向数组第二个元素的地址
cout<<"pw[0] is "<<pw[0]<<endl; //输出pw[1] is 0.22
cout<<"pw[1] is "<<pw[1]<<endl; //输出pw[1] is 0.32
pw=pw-1; //恢复原来的值
delete [] pw; //释放pw所指向的内存
//由于直接定义的数组中数组名只是一个名字,不可以进行加减运算,但是指针是变量,就可以修改它的值
//比如下面的语句是错误的
//int sw[10]; //有效 定义一个数组
//sw=sw+1; //无效
}
最后编辑于 2019.02.17 18:33 haijing in hz miss my family