C++使用new分配内存,动态数组,delete释放new的内存

  1. 指针变量必须指定一个具体的地址,要么指定一个变量的地址,要么new 个新地址

    //错误,p没有指定具体地址 
    int *p;
    *p=10; 
    
    //有效,此时*p=a=10 
    int a=10; 
    int *p=&a;    //用地址运算符&,获得a的地址 
    
    //有效,此时只能用指针访问地址,因为没有变量名 
    int *p=new int;
    *p=10;
    
  2. 指针的真正用武之地在于,在运行时动态分配未命名的内存。此时,只能用指针来访问内存-----new运算符 格式:

    typename *p = new typename; 
    delete p;
    

    例如

    int *p_int = new int;  //一般变量
    *p_int=101; 
    delete p_int;
    

    new int告诉程序,需要new一块合适的内存,存储int类型的数据(也就知道了需要多少字节),然后返回地址,赋给p_int。地址本身只指出了对象存储地址的开始,类型告诉程序需要占用的字节数。此时只能用指针访问该地址,因为它没有个变量名称。
    new请求内存,用delete释放内存,一定配合使用.

  3. 动态数组

    //动态数组   
    int *p_array = new int[10];   
    delete [] p_array;  
    

    动态数组好处是其长度可以在程序运行时确定;而静态数组的长度一开始就得给定,不能是不确定的数,所以容易造成空间不够和浪费内存。

    数组名就是地址,是第一个元素的地址,也等于整个数组的地址。
    指针加1就是加上指针指向数据类型的长度

    double arr[10]={1,2,3,4,5};
    double *p=arr;
    double *p1=&arr[0];
    
    此时
    *p=1;
    *p1=1;
    *(p+1)=2;   //指针值可以修改,加1就是加上对应数据的长度
    *(p1+1)=2;
    sizeof(arr)=80;//数组名和指针的不同之一,是整个数组的长度
    sizeof(p)=8;
    &arr和arr虽然地址相同,但是arr+1是地址加8(&arr+1)是地址加80
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值