| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1960 人关注过本帖
标题:以下两段代码输出结果为何不同?
只看楼主 加入收藏
hffjhhh
Rank: 1
等 级:新手上路
帖 子:127
专家分:7
注 册:2019-4-10
结帖率:90.38%
收藏
已结贴  问题点数:20 回复次数:6 
以下两段代码输出结果为何不同?
第一份代码如下:
程序代码:
#include"stdio.h"
int main(void){
    int *ptr;
    int torf[2][2]={12,14,16};
    ptr=torf[0];
    printf("%d  %d",*ptr,*(ptr+2));
    return 0;
}

输出结果为:12 16
第二份代码如下:
程序代码:
#include"stdio.h"
int main(void){
    int *ptr;
    int torf[2][2]={{12},{14,16}};
    ptr=torf[0];
    printf("%d  %d",*ptr,*(ptr+2));
    return 0;
}

输出结果为:12 14

为什么第二份代码的初始化的内容中多了两个花括号,就导致两份代码的输出结果不同?
搜索更多相关主题的帖子: 输出 代码 int 结果 不同 
2020-04-28 22:05
thhkb
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:25
专家分:107
注 册:2020-4-11
收藏
得分:10 
图片附件: 游客没有浏览图片的权限,请 登录注册

潜水,灌水。
2020-04-28 22:30
thhkb
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:25
专家分:107
注 册:2020-4-11
收藏
得分:0 
第二个程序的{{12},{14,16}},第一行默认是12,0

潜水,灌水。
2020-04-28 22:31
hffjhhh
Rank: 1
等 级:新手上路
帖 子:127
专家分:7
注 册:2019-4-10
收藏
得分:0 
回复 3楼 thhkb
还有另一个问题,以下两份代码中,为什么第一份代码可以运行,第二份代码却无法运行?
第一份代码如下:
程序代码:
#include"stdio.h"
int main(void){
    int (*ptr)[2];
    int torf[2][2]={12,14,16};
    ptr=torf;
    printf("%d  %d",**ptr,**(ptr+1));
    return 0;
}

第二份代码如下:
程序代码:
#include"stdio.h"
int main(void){
    int *ptr;
    int torf[2][2]={12,14,16};
    ptr=torf;
    printf("%d  %d",**ptr,**(ptr+1));
    return 0;
}
2020-04-28 23:16
aec1530
Rank: 2
等 级:论坛游民
帖 子:1
专家分:10
注 册:2020-4-28
收藏
得分:10 
回复 4楼 hffjhhh
类型不一样,第一个是数组指针

[此贴子已经被作者于2020-4-28 23:35编辑过]

2020-04-28 23:32
thhkb
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:25
专家分:107
注 册:2020-4-11
收藏
得分:0 
回复 4楼 hffjhhh
第二个程序,ptr=torf,只是把torf数组中的值传了过去,而ptr只是个指针变量,**(ptr+1)这个语句的意思就相当是地址+1取值,然后ptr这个指针变量就会溢出。而第一个程序的ptr设置的是数组指针,所以你+1不会溢出。

潜水,灌水。
2020-04-29 08:38
hffjhhh
Rank: 1
等 级:新手上路
帖 子:127
专家分:7
注 册:2019-4-10
收藏
得分:0 
以下是引用thhkb在2020-4-29 08:38:27的发言:

第二个程序,ptr=torf,只是把torf数组中的值传了过去,而ptr只是个指针变量,**(ptr+1)这个语句的意思就相当是地址+1取值,然后ptr这个指针变量就会溢出。而第一个程序的ptr设置的是数组指针,所以你+1不会溢出。

这似乎不是溢出的问题,因为如果将代码改为这样,此时ptr没有溢出,但是同样不行.
程序代码:
#include"stdio.h"
int main(void){
    int *ptr;
    int torf[2][2]={12,14,16};
    ptr=torf;
    printf("%d  ",**ptr);
    return 0;
}
2020-04-29 16:07
快速回复:以下两段代码输出结果为何不同?
数据加载中...
 
   



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

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