scanf()和printf()的问题

vmape 2003-09-07 08:48:02
#include <stdio.h>

int main()
{
int num[2];
scanf ("%d %d",num[0],num[1]);
printf ("%d %d",num[0],num[1]);
return(0);
}

就着么简单的程序,运行时毛病多得不得了。我输入12 32,它输出64 3129???为什么啊?

谢谢大家!
...全文
41 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
windyguy 2003-09-08
  • 打赏
  • 举报
回复
数组绝对不是指针,这是一个误解,具体看C专家编程一书,邮电出的。作者是Peter

比如指针的地址是0x310f,这个地址里面存的东西是0x330f,所谓指针指向的东西就是0x330f。

但是数组名就不一样了,它并没有一个地址来存放它指向的东西。可以把它看作一个地址常量。
Zeroins 2003-09-08
  • 打赏
  • 举报
回复
zhuixe(竹子) 兄:
应为:
scanf ("%d %d", num, num+1); 和
scanf ("%d %d", &num[0], &num[1]); 一样吧

scanf (%d %d", &num[0], &num[1]);== scanf ("%d %d", &(*(num + 0)), &(*(num + 1)));
== scanf ("%d %d", num, num+1);
Zeroins 2003-09-08
  • 打赏
  • 举报
回复
num 可以理解为一个常量指针

那麽 *(num + 0)、*(num + 1) …… 是指针吗
*(num + 0) == num[0]
*(num + 1) == num[1]
……

所以 scanf ("%d %d",&num[0], &num[1]);

CAT323 2003-09-08
  • 打赏
  • 举报
回复
通通一句话解答:
数组是划分的一段内存空间;
数组名是为了方便人们引用已定义的数组而存在的一个地址,用标识符表示;
指针是一个变量:专门存放地址,它可以指向存放任意变量、数组的内存单元;
lyff8neo 2003-09-07
  • 打赏
  • 举报
回复
你最好去看看the c programme 中的库函数啊!
zhuixe 2003-09-07
  • 打赏
  • 举报
回复
num 是数组,也是指针,num[0],num[1]只是数组的一个元素,不是指针
scanf("%d",num),可以将num当作指针,但num指向的数据是num[0],
num+1, 指向num[1]

scanf("%d",num,num+1),和scanf("%d",num[0],num[1]),一样
breezerain 2003-09-07
  • 打赏
  • 举报
回复
num[0], num[1]不是数组,只是数组的一个元素而已
vmape 2003-09-07
  • 打赏
  • 举报
回复
我知道scanf应该传递地址,但是数组本身不就是指针么?!没有理由再引用啊?改正之后确实好用了,可是…………谁能解释一下,数组还需要引用么?谢谢了!
dong780315 2003-09-07
  • 打赏
  • 举报
回复
!! 又学到了点知识!
jakelove 2003-09-07
  • 打赏
  • 举报
回复
其实毛病并不多。只有一行:scanf ("%d %d",num[0],num[1]);
改为: scanf("%d %d", &num[0], &num[1]); (当然,如果要考虑溢出的话,就需要多加入一些代码了)
windyguy 2003-09-07
  • 打赏
  • 举报
回复
……,scanf应该传地址吧。
scanf("%d %D",&num[0],&num[1]);

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧