Chinaunix首页 | 论坛 | 博客
  • 博客访问: 317816
  • 博文数量: 50
  • 博客积分: 494
  • 博客等级: 下士
  • 技术积分: 1045
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-06 16:49
文章分类

全部博文(50)

文章存档

2016年(1)

2014年(4)

2013年(29)

2012年(16)

分类: C/C++

2012-11-13 15:50:33


问题1:下面是一段程序和执行的结果,具体原因是为什么呢?

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<string.h>
  3. //typedef unsigned char u8;
  4. int main(void)
  5. {
  6.     int body[10];
  7.     memset(body, 0, sizeof(body));
  8.     scanf("%d",body);
  9.     printf("%d\n",body);

  10.     return 0;
  11. }


代码改成如下,肯定是行的

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<string.h>
  3. typedef unsigned char u8;
  4. int main(void)
  5. {
  6.     u8 body[10];
  7.     int num;
  8.     scanf("%d",&num);
  9.     sprintf(body,"%d",num);
  10.     printf("%s\n", body);
  11.     return 0;
  12. }

疑问是:第一个代码到底错在哪呢,是不是当输入的时候(scanf)int型的数组不能用数组名作为首地址那样输入,printf也不能那样直接通过数组名来输出,那么是为什么呢?

问题2:

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4. typedef unsigned char u8;
  5. int main(void)
  6. {
  7.     char body[200];
  8.     memset(body, 0, sizeof(body));
  9.     scanf("%s",body);
  10.     //if((u8)body % (u8)5 == 0)
  11.     if((u8)body >= 0)
  12.         puts("haha");
  13.     return 0;
  14. }
注释的if ,就不会出来了(编译都能通过,会有类型不兼容的warning,这个莫非说明从char强制转化为整形 之后能进行关系运算,不能进行算术运算????


先记在这里,最终还是会搞明白的。


2013.2.20

今天再一次看这篇博文,突然发现自己之前真的有点傻啊,数组在scanf的时候,当然是不能直接通过数组名来进行,而是要通过循环

对每个元素的输入。

通过对这篇博文的阅读,会更加明白为什么不能直接用数组名。(数组名是常量,而scanf里面的地址量输入的是变量的地址)

http://blog.163.com/baobao_zhang@126/blog/static/4825236720079410517449/

看完上面的博客还是觉得很奇怪,貌似是可以的。哎。。。


阅读(1088) | 评论(0) | 转发(2) |
0

上一篇:强制转化

下一篇:strtok 问题

给主人留下些什么吧!~~