• 注册 / 登录
  • 切换到窄版
  • 查看: 1636|回复: 0

    C语言 指针 p、*p、&p、*&p、&*p

    [复制链接]

    676

    主题

    690

    帖子

    6808

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    6808
    发表于 2023-3-16 09:56:08 | 显示全部楼层 |阅读模式

    路线栈欢迎您!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    前言

    在学习指针那些千奇百怪的符号前,我们要先来熟悉两位老朋友。

    • & 是取地址符号,获得某个变量的地址。
    • * 是取值符号,可以根据根据地址,取出该地址存储的数据。
    也就是说,* 和 & 是可以连起来使用的。

    基础程序:

    1. #include<stdio.h>

    2. int main()
    3. {
    4.   int num=6;
    5.   int *p=#
    6. }
    复制代码


    输出实例1:使用变量 num ,输出变量 num 的值。

    1. printf("%d\n",num);
    2. // 输出结果:
    3. 6
    复制代码


    输出实例2:使用 *p ,输出变量 num 的值。

    1. printf("%d\n",*p);
    2. // 输出结果:
    3. 6
    复制代码


    注意:使用指针输出所指地址的值时,指针前要记得加 *。

    小结:num 和 *p 输出的,都是变量 num 的值。

    输出实例3:&num ,使用取地址符 &,输出变量 num 的地址。

    1. printf("%p\n",&num);
    2. // 输出示例:
    3. 000000000062FE1C
    复制代码


    注意:此时输出的是变量 num 的地址。

    输出实例4:p ,使用指针 p ,输出变量 num 的地址。

    1. printf("%p\n",p);
    2. // 输出示例:
    3. 000000000062FE1C
    复制代码


    注意:输出指针所指地址时,指针前不加星号。

    此时输出的是变量 num 的地址。

    小结:&num 和 p 输出的,都是 num 的地址。

    输出实例5:&p ,使用取地址符 &,输出指针变量自身的地址。

    1. printf("%p\n",&p);
    2. // 输出示例:
    3. 000000000062FE10
    复制代码


    注意:此时输出的是指针变量 p 的地址,而不是num的地址。

    输出实例6:&*p

    1. printf("%p\n",&*p);
    2. // 输出示例:
    3. 000000000062FE1C
    复制代码


    &*p 意思是获取 *p 的地址,而 *p 指的是num,所以输出的就是num的地址,也就是p。

    输出实例7:*&p

    1. printf("%p\n",*&p);
    2. // 输出示例:
    3. 000000000062FE1C
    复制代码


    *&p 意思是取出 &p 地址处存的值,&p 指的是 p 这个指针变量的地址,那么根据地址取出的就是 p 这个指针变量。

    小结:可以发现 &*p 和*&p 其实都是 p,也就是num的地址。

    作者:小木之
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|路丝栈 ( 粤ICP备2021053448号 )

    GMT+8, 2024-12-22 14:02 , Processed in 0.045377 second(s), 19 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表