• C++指针解读(2)-- 指针变量


    1、指针变量

    存放指针的变量叫指针变量,定义指针变量的一般形式为:

    类型名 *指针变量名;

    比如:

    1. int *pi;
    2. float *pf;

    另外,也可以在定义指针变量时对它进行初始化

    1. int i = 12;
    2. float f = 12.0
    3. int *pi = &i;
    4. float *pf = &f;

    建议在定义指针变量的同时进行初始,如果此时指针没法指向有效的地址,可以把NULL赋给指针。比如:

    int *pi = NULL;

    我们可以用下面的图来表示指针变量和其所指向的变量的对应关系。

    关于指针变量,我们要注意这几个问题:

    (1)指针变量前面的“*”号表示该变量为指针变量。指针变量名是pi、pf,而不是*pi、*pf。在C语言中,*pi代表指针变量所指向的变量的值,也就是int i的值;同理,*pf代表float f的值。

    比如在定义了指针变量后,应该把地址赋给pi、pf,而不是*pi、*pf:

    1. int i = 12;
    2. float f = 12.0
    3. int *pi;
    4. float *pf;
    5. //正确的赋值方式
    6. pi = &i;
    7. pf = &f;
    8. //下面的赋值是错误的
    9. *pi = &i;
    10. *pf = &f;

    (2)一个指针变量包含2个重要的信息:地址和数据类型。地址确定了变量在内存中的位置,数据类型确定了变量所占内存的大小。

    (3)int *pi 表示一个指向int型变量的指针变量。它可以指向任何int型变量,但不能指向其他类型。

    (4)指向int数据的指针类型表示为:int *,读作”指向int的指针“或”int指针“。int *、char *、float*分别读作int指针、char指针、float指针,它们是3种不同类型的指针。

    2、指针相关的几个概念

    假如pi是int型的指针变量,它指向变量a,下面我们来看几个概念。

    (1)

    int *pi = &a;

    把变量a的地址赋给指针pi。指针变量pi指向变量a,pi的值是变量a的地址。

    (2)

    *pi = 100;

    表示把整数100赋给pi指向的变量,即把100赋给变量a,a = 100。

    (3)

    printf("%d\n", *pi);

    打印pi所指向的变量的值,即打印变量a的值。

    (4)

    printf("%p\n", pi);

    打印指针变量pi的值,即打印变量a的地址。

    (5)

    printf("%p\n", &pi);

    打印指针变量自身的地址。

    (6)&*pi

    从右往左读,*pi表示指针变量pi所指向 变量,即a;&a表示取变量a的地址,即指针变量pi。

    (7)*&a

    先计算&a,即pi;*pi表示变量a。

    (8)(*pi)++

    先计算*pi,即a;这条语句的意思是a++。

    (9)*pi++

    从右往左读,先pi++,再*,所以等价于*(pi++)。因为pi是指针变量,这里的pi++是什么意思呢?

    pi++表示指针变量向下移动1次,假如pi指向的是整型变量,则pi++就是往下移动4个字节。所以*pi++的意思是读取下一个内存地址的值。当然,这可能会读到非法内存而导致程序出错。

  • 相关阅读:
    解决Win11/10中Edge浏览器页面加载不出来、打不开问题|有网但是打不开,加载不了
    Maintaining leader role through timed lease mechanism
    浅谈:服务架构进化论
    基于中文金融知识的 LLaMA 系微调模型的智能问答系统:LLaMA大模型训练微调推理等详细教学
    python篇-自动化-poco
    2.2.2 部署Master节点、添加Node节点
    uniapp 总结篇 (小程序)
    《HelloGitHub》第 77 期
    分享117个PHP源码,总有一款适合你
    免安装版MySQL(解压版)安装详细教程及注意事项
  • 原文地址:https://blog.csdn.net/mars21/article/details/133807274