指针的一些使用

这篇博客详细介绍了C++中的指针概念,包括如何声明指针、给指针赋值(通过取址符&和new运算符)、对指针进行解引用以及区分指针和指针所指向的值。此外,还讨论了数组名在C++中的特殊性,指针算术操作如加减运算,以及动态和静态数组的创建与释放。最后,提到了数组的指针表示法和数组下标操作的等价性。
摘要由CSDN通过智能技术生成

指针小结

  • 声明指针

    // 要声明指向特定类型的指针
    typeName * pointerName;
    
  • 给指针赋值

    /*
    应将内存地址赋给指针。可以对变量名应用&运算符,
    来获得被命名的内存的地址,new运算符返回未命名的内存的地址
    */
    double * pn;
    double * pa;
    char * pc;
    double bubble = 3.2;
    pn = &bubble;
    pc = new char;
    pa = new double[30];
    
  • 对指针解除引用

    对指针解除引用意味着获取指针指向的值。对指针应用截除或间接值运算符(*)来解除引用。因此,如果向上面的例子中那样,pn是指向bubble的指针,则*pn是指向的值,即3.2.

    cout << *pn;
    *pc = 'S';
    

另一种对指针截除引用的方法是使用数组表示法,例如,pn[0]与*pn是一样的。绝不要对未被初始化为适当地址的指针解除引用。

  • 区分指针和指针所指向的值

    如果pt是指向int的指针,则*pt不是指向int的指针,而是完全等同于一个int类型的变量,pt才是指针。

    int * pt = new int;
    *pt = 5;
    
  • 数组名

    在多数情况下,c++将数组名视为数组的第一个元素的地址。

    int tacos[10];
    

    一种情况例外,将sizeof运算符用于数组名用时,此时将返回整个数组的长度(单位为字节)

  • 指针算术

    C++允许将指针和整数相加。加1的结果等于原来地址值加上指向对象占用的总字节数。还可以将一个指针减去另一个指针,获得两个指针的差。后一种运算将得到一个整数,仅当两个指针指向一个数组(也可以指向超出结尾的一个位置)时,这种运算才有意义,这将得到两个元素的间隔。

    int tacos[10] = {5,2,8,4,1,2,2,4,6,8};
    int * pt = tacos;    // 假设pt与数组tacos的地址为3000
    pt = pt + 1;    // 现在pt的地址为3004,int占4字节
    int *pe = &tacos[9];// pe的地址为3036,
    pe = pe -1;    // 现在pe的地址为3032,是tacos[8]的地址
    int diff = pe - pt; // 距离为7,tacos[1]和tacos[8]之间的距离
    
  • 数组的动态联编和静态联编

    使用数组声明来创建数组是,将采用静态联编,即数组的程度在编译时设置;

    int tacos[10];

    使用new[]运算符创建数组时,将采用动态联编(动态数组),即将在运行时为数组分配空间,其长度也将在运行时设置。使用完这种数组后,应使用delete[]释放其占用的内存;

    int size;
    cin >> size;
    int * pz = new int [size];
    ...
    delete [] pz;
    
  • 数组表示法和指针表示法

    使用方括号数组表示法等同于对指针解除引用:

    tacos[0] means *tacos
    tacos[3] means *(tacos + 3)

    int * pt = new int[10];    // pt指向一个长度10的数组
    *pt = 5;    // 将数组第一个数赋为5
    pt[0] = 6;    // 重新赋值数组第一个数,将其赋为6
    pt[9] = 44;    // 将数组第九个数赋为44
    int coats[10];
    *(coats + 4) = 12;    // 将数组第四个数赋为12
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值