索千 2023-03-12 22:46 采纳率: 74.4%
浏览 7
已结题

为什么没加K指针时能输出后面的,加了K指针后输出不了后面的(关键词-#include)

为什么没加 K 指针时能输出后面的,加了 K 指针后输出不了后面的?


#include<stdio.h>
int main()
{
    int a,*p,*q,*k;
    printf("p的地址:%p\n",&p);
    printf("q的地址:%p\n",&q);
    printf("a的地址:%p\n",&a);
    a=10;
    *p=a;
    q=&a;
    k=&a;
    printf("*q=%d\n",*q);
    printf("*p=%d\n",*p);
    printf("交换后p的地址:%p\n",&p);
    printf("交换后q的地址:%p\n",&q);
    printf("交换后a的地址:%p\n",&a);
}

img

img

  • 写回答

1条回答 默认 最新

  • dahe0825 2023-03-12 23:12
    关注

    参考GPT和自己的思路,在这个代码中,最后三个print语句无法输出正确的结果是因为在程序中有一个指针未被初始化,这个未被初始化的指针是指针变量p。

    在程序中,指针p被用于存储变量a的值,但是在指针p被声明后,它并没有被初始化为指向任何特定的内存位置,因此当程序尝试使用指针p存储变量a的值时,指针p实际上指向了一个未知的内存位置。

    这个问题可以通过将指针p初始化为指向变量a的地址来解决,例如:

    p = &a;

    这样就可以确保指针p指向正确的内存位置,使得后续的操作可以正确执行,并且最后三个print语句可以输出正确的结果。
    以下是修正后的代码:

    #include<stdio.h>
    int main()
    {
        int a, *p, *q, *k;
        p = &a; // 初始化指针p,使其指向变量a的地址
        printf("p的地址:%p\n", &p);
        printf("q的地址:%p\n", &q);
        printf("a的地址:%p\n", &a);
        a = 10;
        *p = a; // 将变量a的值存储到指针p指向的内存位置
        q = &a;
        k = &a;
        printf("*q=%d\n", *q);
        printf("*p=%d\n", *p);
        printf("交换后p的地址:%p\n", &p);
        printf("交换后q的地址:%p\n", &q);
        printf("交换后a的地址:%p\n", &a);
        return 0;
    }
    

    修改后的代码在使用指针p存储变量a的值之前先将指针p初始化为指向变量a的地址,从而避免了未初始化指针的问题。同时,代码中也加上了返回值0,使得程序可以正确结束。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月22日
  • 已采纳回答 3月14日
  • 创建了问题 3月12日

悬赏问题

  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥15 有关于推荐系统jupyter
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据
  • ¥15 关于树的路径求解问题
  • ¥15 yolo在训练时候出现File "D:\yolo\yolov5-7.0\train.py"line 638,in <module>
  • ¥30 戴尔inspiron独显直连