加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C程序如何产生这样的输出?

发布时间:2020-12-16 06:45:15 所属栏目:百科 来源:网络整理
导读:void main(){ char str[2][7] = {"1234567","abcdefg"}; char** p = str; printf("%dn",*(p+1)); printf("%cn",*(p+1));} 输出是: 16310083095 编辑:谢谢.我看到’5’只有0x35,除了str [0] [4]我应该是.为什么我不能走出str [0] [4]而不是这个奇怪的1631
void main()
{
    char str[2][7] = {"1234567","abcdefg"};
    char** p = str;
    printf("%dn",*(p+1));
    printf("%cn",*(p+1));
}

输出是:

1631008309
5

编辑:谢谢.我看到’5’只有0x35,除了str [0] [4]我应该是.为什么我不能走出str [0] [4]而不是这个奇怪的1631008309?

天哪,我很愚蠢地问这个问题!谢谢你们,伙计们.

解决方法

你指的是在分配给二维数组的内存开头的一个char **.

当你向指针添加1时,它会向你移动指向的类型的大小,在这种情况下是char *的大小,在你的系统中显然是4个字节.然后你取消引用它并将结果视为int(%d),它给你我在评论中提到的a765来展开.当你取消引用它并将其视为一个char时,你正确得到5.

[我看到放松已经删除了他们的答案,所以为了完整性我会补充说“a765”是你得到的更大数字的ASCII解释(0x61373635).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读