不需要睡觉o 2024-06-03 22:56 采纳率: 94.7%
浏览 2
已结题

这段代码中指向整形数据a的指针变量pointer的值不应该是a的地址吗,为什么*pointer又变成a元素的值了


    #include<stdio.h>
int main(){
        int a=100;
        int* pointer=&a;
        printf(“通过变量名引用变量a=%d\n”,a);
        printf(“通过指针引用变量a=%d\n”, *pointer);
        printf(“变量a的地址=%p\n”,&a);
        printf(“指针pointer的值=%p\n”,pointer);
        printf(“指针变量pointer的地址=%p\n”,&pointer);    /*指针变量pointer中存放的是整形变量a的地址,它的地址和a的地址不同*/
        return 0;
}

这段代码中指向整形数据a的指针变量pointer的值不应该是a的地址吗,为什么*pointer又变成a元素的值了 指针变量pointer不是只存储了a的地址吗从哪来的a的具体值呀

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-03 22:56
    关注

    引自免费微信小程序:皆我百晓生

    在C语言中,指针是一个特殊的变量类型,它用来存储内存地址。当声明一个指针变量并将其初始化为另一个变量的地址时,例如 int* pointer = &a; 这一行,pointer 变量就存储了整型变量 a 的地址。

    在C语言中,我们用 * 运算符来解引用(dereference)一个指针,这意味着我们可以获取指针所指向的变量的值。所以当你写 *pointer 时,实际上是在说“给我 pointer 所指向的那个位置上的值”。

    在你的例子中,*pointer 就是访问 a 变量的值,因为 pointer 存储的是 a 的地址。当你执行 printf("通过指针引用变量a=%d\n", *pointer); 时,实际上是输出了 a 变量的值(即100),而不是 pointer 变量自身的值。

    下面是对代码逐行解释:

    1. #include<stdio.h>:包含标准输入/输出库。
    2. int main(){...}:程序入口。
    3. int a=100;:定义整型变量 a 并赋值为100。
    4. int* pointer=&a;:定义整型指针变量 pointer 并将其指向 a 的地址。
    5. printf("通过变量名引用变量a=%d\n",a);:打印变量 a 的值(100)。
    6. printf("通过指针引用变量a=%d\n", *pointer);:打印指针 pointer 指向的变量(即 a)的值(100)。
    7. printf("变量a的地址=%p\n",&a);:打印变量 a 的地址。
    8. printf("指针pointer的值=%p\n",pointer);:打印指针 pointer 自身的值(地址)。
    9. printf("指针变量pointer的地址=%p\n",&pointer);:打印指针变量 pointer 的地址,这与 a 的地址不同,因为它是指向 a 地址的指针。
    10. return 0;:表示正常退出程序。
    11. }:结束 main() 函数。

    总结一下,pointer 是一个存储 a 地址的变量,而 *pointer 则用于获取 a 变量的值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月11日
  • 已采纳回答 6月3日
  • 创建了问题 6月3日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真