为什么得不到期待的结果?

发布于 2022-09-13 00:59:37 字数 1385 浏览 56 评论 0

程序代码

#include"stdio.h"

void main()
{
    int a[5];
    int *p;
    int i;
    
    for(i=0;i<5;i++);
    {
        a[i]=i+1;
        p=a;
    }
    
    /*下标法输出数组元素*/
    
    for(i=0;i<5;i++)
    {
        printf("a[%d]:%-8d",i,a[i]);
        printf("\n");
    }
    
    /*地址法输出数组元素*/
    
    for(i=0;i<5;i++)
    {
        printf("*(a+%d):%-8d",i,*(a+i));
        printf("\n");
    }
    
    /*下标法输出数组元素*/
    
    for(i=0;i<5;i++)
    {
        printf("p[%d]:%-8d",i,p[i]);
        printf("\n");
    }
    
    /*地址法输出数组元素*/
    
    for(i=0;i<5;i++)
    {
        printf("*(p+%d):%-8d",i,*(p+i));
        printf("\n");
    }
}   

运行结果

root@huangzihan:/program/c_program# ./output_array_elements.out
a[0]:0
a[1]:0
a[2]:1835622560
a[3]:22006
a[4]:-1639330576
*(a+0):0
*(a+1):0
*(a+2):1835622560
*(a+3):22006
*(a+4):-1639330576
p[0]:0
p[1]:0
p[2]:1835622560
p[3]:22006
p[4]:-1639330576
*(p+0):0
*(p+1):0
*(p+2):1835622560
*(p+3):22006
*(p+4):-1639330576

期待结果

a[0]:1    a[1]:2    a[2]:2    a[3]:4    a[4]:5
*(a+0):1  *(a+1):2  *(a+2):3  *(a+3):4  *(a+4):5
p[0]:1    p[1]:2    p[2]:3    p[3]:4    p[4]:5
*(p+0):1  *(p+1):2  *(p+2):3  *(p+3):4  *(p+4):5

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

幸福%小乖 2022-09-20 00:59:37
    for(i=0;i<5;i++);   // <-- 注意这个分号
    {
        a[i]=i+1;
        p=a;
    }

由于分号的存在,实际循环里啥都没干,下面的代码块不在循环内,只干了 a[5] = 6,越界赋值……在赋值语句后面打印一下就能看到结果(注意:只打印了一次,说明不在循环内)

    for (i = 0; i < 5; i++);
    {
        a[i] = i + 1;
        printf("debug a[%d] = %d\n", i, a[i]);
        p = a;
    }

下面的代码有两个小问题:

  1. printf("\n") 要放在循环外面,不然每个输出都会换行,如

        for (i = 0; i < 5; i++)
        {
            printf("a[%d]:%-8d", i, a[i]);
        }
        printf("\n");
  2. 如果要对齐,需要计算字符已经占据的位置,两个带 * 的输出,后面的数字占位应该用 -6d 才能对齐。
耳根太软 2022-09-20 00:59:37

这玩意纯粹考验眼神来的么

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文