免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: gogaga
打印 上一主题 下一主题

有个关于指针的小程序,挺迷惑不解的,请高手帮看看! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-07-20 18:49 |只看该作者
就是啊,前三排不加强制转换怎么能打印出来,后三排为啥只有强制转换才能打印出来呢?

============================================================
array_s[0]'s address is: 134519176       Vaule is:0
array_f[0]'s address is: 134519136       Vaule is:0
array_d[0]'s address is: 134519040       Vaule is:0

============================================================
array_s[0]=0     address is: 134519136
array_f[0]=0     address is: 0
array_d[0]=0     address is: 0

论坛徽章:
0
12 [报告]
发表于 2007-07-20 19:24 |只看该作者
对啊, 只是顺序倒了一下.

array_f, *array_f  //此顺序输出正确
*array_f, array_f //出错了!!!

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
13 [报告]
发表于 2007-07-20 19:49 |只看该作者
原帖由 sinboyang 于 2007-7-20 19:24 发表
对啊, 只是顺序倒了一下.

array_f, *array_f  //此顺序输出正确
*array_f, array_f //出错了!!!

对错误使用语言/函数得到的结果没有必要过于计较。

论坛徽章:
0
14 [报告]
发表于 2007-07-21 08:48 |只看该作者
原帖由 MMMIX 于 2007-7-20 19:49 发表

对错误使用语言/函数得到的结果没有必要过于计较。


按照常规思路, 两者调换是没有关系的. 怎么会出现这种结果不一致. 你说结果不计较, 那又怎么能查出问题存在的原因呢?

论坛徽章:
0
15 [报告]
发表于 2007-07-21 09:40 |只看该作者
#include <stdio.h>

int ctr;
short  array_s[10];
float  array_f[10];
double array_d[10];

int main(void)
{
  printf("\t\t Short\t\tFloat\t\tDouble");
  printf("\n============================================================");

  for(ctr=0; ctr < 10; ctr++)
    printf("\n Element %d:\t%ld\t%ld\t%ld",ctr,&array_s[ctr],&array_f[ctr],&array_d[ctr]);
  
  
  printf("\n============================================================\n");
  printf("array_s[0]'s address is: %ld \t Vaule is:%d \n",array_s, *array_s);
  printf("array_f[0]'s address is: %ld \t Vaule is:%d \n",array_f, *array_f);
  printf("array_d[0]'s address is: %ld \t Vaule is:%d \n",array_d, *array_d);

  printf("\n============================================================\n");
  printf("array_s[0]=%d \t address is: %ld \n",*array_s, array_s);
  printf("array_f[0]=%d \t address is: %ld \n",*array_f, array_f);
  printf("array_d[0]=%d \t address is: %ld \n",*array_d, array_d);
  printf("\n============================================================\n");
  

for(ctr=0; ctr<10; ctr++)
  printf("array_f[%d]=%d \n",ctr,array_f+ctr);  


  return 0;
}

就如MMMIX 所说, 这个子程序的printf里面的参数的格式有问题, array_f和array_d对应的输出格式是%f, 而本程序用的是%d,所以在取的时候就会出现类型取地址出错的错误. 应该要对应起来的哦.

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
16 [报告]
发表于 2007-07-21 11:26 |只看该作者
原帖由 sinboyang 于 2007-7-21 08:48 发表


按照常规思路, 两者调换是没有关系的. 怎么会出现这种结果不一致. 你说结果不计较, 那又怎么能查出问题存在的原因呢?

对每个变量使用对应的格式,然后在编译时打开警告选项,这些错误根本就不会出现。

论坛徽章:
0
17 [报告]
发表于 2007-07-23 11:19 |只看该作者
打印地址不是 "%p"么
........
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP