| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1876 人关注过本帖
标题:为什么 s[ i ] 这个没有定义的数组,最后能输出 9198
只看楼主 加入收藏
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:8 
为什么 s[ i ] 这个没有定义的数组,最后能输出 9198
被人问倒这么一个问题,我用 VS2015 步进运行了很多次,发现这个没有定义的数组,在循环到 i = 1 时,被成功赋值 9198,并成功地最终输出
程序代码:
#include<stdio.h>
int main()
{
        int i,c;
        char s[2][5]={"8980","9198"};
        for(i=3;i>=0;i--)            
        {
                c=s[0][i]+s[1][i]-2*'0';
                s[0][i]=c%10+'\0';
        }
        for(i=0;i<=1;i++)
        puts(s[i]);
        return 0;
}
搜索更多相关主题的帖子: 输出 定义 成功 int 数组 
2020-12-02 13:36
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:565
专家分:3690
注 册:2019-7-29
收藏
得分:10 
你输出的是地址。s[i]和&s[i][0]是一样的,是指向第i行第一个元素的指针地址

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-12-02 13:48
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1474
专家分:9035
注 册:2010-3-16
收藏
得分:10 
s[i]不是定义了么,字符串数组
等价于
char s[2][5];
strcpy(s[0], "8980");
strcpy(s[1], "9198");

s[i]指一个字符串,s[i][j]指字符串s[i]中的第j个字符。

代码中一直在操作字符串s[0],字符串s[1]一直没动过。
2020-12-02 14:01
请输入密码
Rank: 2
等 级:论坛游民
威 望:5
帖 子:35
专家分:84
注 册:2020-11-19
收藏
得分:0 
s[0][i]=c%10+'\0';

s[0][i]=c%10+'0';


这是……

Bug易改,码风难移。
有事离开,无事灌水。
2020-12-02 14:20
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:0 
回复 2楼 纯蓝之刃
明白了,谢谢!
2020-12-02 14:30
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:0 
回复 3楼 apull
s[i] 是地址,也算是隐形定义了哈,清楚了,谢谢!
2020-12-02 14:31
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:0 
回复 4楼 请输入密码
怎么啦?
2020-12-02 14:33
请输入密码
Rank: 2
等 级:论坛游民
威 望:5
帖 子:35
专家分:84
注 册:2020-11-19
收藏
得分:0 
回复 7楼 风过无痕1989
只是好奇这个程序+'\0'的意思在哪里而已。
正常来说是'0'而不是'\0';

Bug易改,码风难移。
有事离开,无事灌水。
2020-12-02 14:51
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:0 
回复 8楼 请输入密码
经上面两位大佬的指导,我在原程序的末尾加了一个 s[2][5] 的输出,一看就完全明白了:
程序代码:
#include<stdio.h>
int main()
{
    int i, j, c;
    char s[2][5] = { "8980","9198" };

    for (i = 3;i >= 0;i--)
    {
        c = s[0][i] + s[1][i] - 2 * '0';
        s[0][i] = c % 10 + '\0';
    }
    for (i = 0;i <= 1;i++)
    {
        puts(s[i]);
    }
    printf("\n");
    
    for (i = 0;i < 2;i++)             // 输出 s[2][5] 数组
    {
        for (j = 0;j < 4;j++)
        {
            printf("%.2d ", s[i][j]);
        }
        printf("\n");
    }
    return 0;
}

**************************************************************
9198

07 00 07 08
57 49 57 56          <- - - - - -     9 0 9 8 的 ASCII码
Press any key to continue . . .
2020-12-02 15:38
快速回复:为什么 s[ i ] 这个没有定义的数组,最后能输出 9198
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023480 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved