zoukankan      html  css  js  c++  java
  • 4.7指针

    4.7指针

    指针的危险:

    c++创建指针时,计算机会分配存储地址的内存,但是不会分配存储指针所指向的数据的内存。

    如:

    long *fellow;
    *fellow=233233;//危险,fellow指针所指向的位置是不知道的,

    一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确定的、适当的地址。

    使用new 分配内存

    指针的真正用武之地是:在运行时分配未命名的内存以存储值。在这种情况下,只能通过指针来访问内存。 

    #include<iostream>
    int main()
    {
    	using namespace std;
    	int nights=1001;
    	int *pt= new int;
    	*pt=1001;
    
    	cout<<"nights value = "<<nights<<" location "<<&nights<<endl;
    	cout<<"int "<<"value= "<<*pt<<" loaction = "<<pt<<endl;
    
    	double *pd=new double;
    	*pd=1000001.0;
    
    	cout<<"double value= "<<*pd<<" lacation= "<<pd<<endl;
    	cout<<"lacation of pointer pd "<<&pd<<endl;
    	cout<<"size of pt "<<sizeof(pt)<<endl<<"size of *pt "<<sizeof(*pt)<<endl;
    	cout<<"size of pd "<<sizeof(pd)<<endl<<"size of *pd "<<sizeof(*pd)<<endl;
    	return 0;
    
    }

    内存的位置随系统而异。

    使用delete释放内存

    int *ps=new int;
    delete ps;

    释放ps指向的内存,但是不会删除指针ps本身。

    一定要配对使用new 和delete 否则会产生内存泄露。

    只能用delete释放new分配的内存,不能使用delete释放变量声明所获得内存。

    不要释放已经释放的内存

    int *ps=new int;//ok
    delete ps;//ok
    delete ps;//not ok
    
    int a=5;
    int *pi=&a;
    delete pi;//not ok

    使用new创建动态数组

    动态创建一个包含10个元素的数组

    int *a=new int[10];

    new返回第一个元素的地址。

    对于用new 创建的数组,释放的格式为

    delete [] a;

    方括号就是释放整的数组,而不仅仅是指针指向的元素。

    访问动态数组可直接使用:a[0],a[1],,,a[9]

    #include<iostream>
    int main()
    {
    	using namespace std;
    	double *p3=new double [3];
    	p3[0]=0.2;
    	p3[1]=0.5;
    	p3[2]=0.8;
    	cout<<"p3[1] is "<<p3[1]<<endl;
    	p3=p3+1;//指向下一个
    	cout<<"now p3[0] is "<<p3[0]<< " and p3[1] is "<<p3[1]<<endl;
    	p3=p3-1;//只想原来的值,以便delete的正确使用
    	delete[] p3;
    	return 0;
    }
    

      

  • 相关阅读:
    redis几种模式的部署(Windows下实现)
    servlet容器:jetty,Tomcat,JBoss
    redis三种模式对比
    Linux expect详解
    expect学习笔记及实例详解
    shell expect的简单实用
    【Spring Boot】内嵌容器
    java 怎么让打印信息换行?
    Java中的静态方法是什么?
    java的接口为什么不能实例化
  • 原文地址:https://www.cnblogs.com/taoxiuxia/p/4135612.html
Copyright © 2011-2022 走看看