感谢解答 2022-02-26 23:24 采纳率: 70.6%
浏览 41
已结题

指针,为啥打印出来的数不对,而且地址每次打印都会变


int main()
{
    float a[5] = {0};
    float* b = a;
    for (int i = 0; i < 5; i++)
    {
        *++b = i;
        printf("%f %f\n", a[i], *b);
    }
    return 0;
}

img

1.为啥两种打印方式出来的结果不一致,我想不通a[i]为啥会有两个0,*b不就是取的a地址的值吗,怎么还对不上
2.这个警告是啥,也没报错,也没阻止代码运行,就是每次都弹出来


int main()
{
    int a[5] = {0};
    int* b = a;
    for (int i = 0; i < 5;i++ )
    {
        *b++ = i;
        printf("%d %d\n", a[i], *b + i);
    }
    printf("\n%p\n", a);
    return 0;
}

img

img

img

3.两段代码除类型外都一致,为啥float不需要+i就能完整打印数组,而int+i还最后一位溢出呢(不+i打印不出来)
4.这个地址不应该是固定的吗,为什么我打印一次就会变一次

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-02-27 00:34
    关注

    供参考:

    #include <stdio.h>
    int main()
    {
        float a[5] = {0};
        float* b = a;
        for (int i = 0; i < 5; i++)
        {
            *b++ = i;  //*++b = i; ++在前,指针 b 相当于 b=b+1 ==>a[1]了,此时 a[1] = i=0
            printf("%f %f\n", a[i], *(b-1));//打印时,前一句 b++ , b指向了a[1]了,所以这里改成*(b-1)
        }
        return 0;
    }
    
    //0.000000 0.000000
    //1.000000 1.000000
    //2.000000 2.000000
    //3.000000 3.000000
    //4.000000 4.000000
    //请按任意键继续. . .
    
    
    #include <stdio.h>
    int main()
    {
        int a[5] = {0};
        int* b = a;
        for (int i = 0; i < 5;i++ )
        {
            *b++ = i;
            printf("%d %d\n", a[i], *(b - 1)); //printf("%d %d\n", a[i], *b + i);
        }
        printf("\n%p\n", a);
        return 0;
    }
    
    //0 0
    //1 1
    //2 2
    //3 3
    //4 4
    
    //0019FF24
    //请按任意键继续. . .
    
    //4.这个地址不是固定的,代码运行一次,给数组 a[5]分配的内存地址不一定都是同一处。
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 已采纳回答 2月27日
  • 创建了问题 2月26日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度