C++数据类型复合类型篇二

指针

  前面给大家介绍了数组、字符串、结构以及共用体和枚举,这里给大家讲讲指针。

  指针是一个变量,其中存放的是地址,而不是值本身。在讲指针初始化之前,大家想想,在学习C语言的时候,使用scanf函数进行输入时,需要使用&地址运算符,来获取变量的地址。其实在C++也运用到了&,只是C++将其解释为引用,即为内存取了一个别名。在使用常规变量时,值是指定的量,而地址派生量,而在处理存储数据时,则将地址视为指定的量,值视为间接值。

指针的使用

声明和初始化指针

  在使用指针时,计算机需要知道跟踪指针指向的值的类型,因此,在指针声明是必须指定指针指向的数据的类型。

#include<iostream>
using namespace std
int main(){
    int* ptr;
    int *pt;
    double* tax;
    int q=10;
    int* q_d=&q;
    char* str;
    *str='d';//错误,不要这样做
    int *de=(int*)0xB8000000;
    const char* ne="dgsadg";
    return o;
}

  第一点,代码第一个int*和第二个int *两种方法都可以,只是两者强调的内容不一样,前者强调这是一个指向int值的指针,后者强调这是一个int值。第二点,double类型虽然和int类型的宽度不同,但两者的指针宽度是相同的。第三点,一定不要使用*str='d'这样的方法为你的指针赋值,因为当你声明指针的时候,由于没有初始化,它有可能有任何值,一旦你这样赋值,就把指针内所指向的地址内存的值覆盖了,这种错误难以发现,十分隐蔽。第四点,要使用数字值作为地址使用,要通过强制类型转换改成适当的地址类型。第五点,可以用指针建立字符数组,但一定要使用const限定符。

使用new来分配内存

  前面讲到指针只是通过名称可以访问的内存提供的一个别名,真正使用指针的是在运行阶段分配未命名的内存以存储值。C语言使用的是malloc(),C++使用的是new()。

#include<iostream>
using namespace std
int main(){
    int* ptr=new int;
    delete ptr;
    double* tax=new double [5];
    tax[0]=1.2;
    tax[1]=3.4;
    delete [] tax;
    return o;
}

   new的使用方法如上述代码,需要注意的是每一个new都要有一个delete来释放内存,否则将会导致内存泄漏。其次因为new是在运行阶段分配内存,所以使用new创建的数组称为动态数组,对应的也要使用delete []来释放内存。

  讲到这里可以和大家讲一下C++管理数据内存的方式,包括自动存储、静态存储、动态存储。在函数内部定义的常规变量使用自动存储空间,被称为自动变量(automatic variable),这意味着它们在所属的函数被调用时自动产生,在该函数结束时消亡。静态存储是整个程序执行期间都存在的存储方式。使变量成为静态的方式有两种1.在函数外面定义,2.使用关键字staic。new和delete运算符提供了一种比自动变量和静态变量更灵活的方法。它们管理了一个内存池,这在C++中被称为自由存储空间(free store)或堆(heap)。该内存池同用于静态变量和自动变量的内存是分开的。因此,数据的生命周期不完全受程序或函数的生存时间控制。

模板类vector

  模板类vector类似于string类,也是一种动态数组,功能十分强大。

#include<iostream>
using namespace std
int main(){
    vector<int> vi;
    int n;
    cin>>n;
    vector<double> vd(n);
    return o;
}

  vi是一个 vector<int>对象,由于vector对象在你插入或者添加值时自动调整长度,因此可以将初始长度设为0。这里只是提一下,后面讲到容器会详细介绍。

                  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值