一个C语言问题!困惑好久了!求解惑! 50

为什么这样能给*i赋值,并能够打印出来#include<stdio.h>intmain(){int*i;chara;scanf("%d",i);printf("%d",*... 为什么这样能给*i赋值,并能够打印出来
#include<stdio.h>
int main(){
int *i;
char a;
scanf("%d",i);
printf("%d",*i);
return 0;
}
而下面这种却不行呢?困惑求解!
#include<stdio.h>
int main(){
char a;
int *i;
scanf("%d",i);
printf("%d",*i);
return 0;
}
展开
 我来答
周小心Bq
2013-03-26 · TA获得超过2509个赞
知道大有可为答主
回答量:1514
采纳率:100%
帮助的人:1865万
展开全部
#include<stdio.h>
#include<malloc.h>
int main(){
int *i;
i=(int*)malloc(sizeof(int)); //你连内存都没分配不报错才怪,上面的例子也是一样错误
scanf("%d",i);
printf("%d",*i);
return 0;
}
追问
你用c-free看看,行不行?
追答
你第一题是不是,下面这样,你上面写的就是比第二个多了句 char a;
#include
int main(){
int *i;
int a;
i=&a;
scanf("%d",i);
printf("%d",*i);
return 0;
}
百度网友2f81dd6
2013-03-26 · TA获得超过856个赞
知道小有建树答主
回答量:475
采纳率:0%
帮助的人:345万
展开全部
我个人的理解是这样的:
在MSDN里scanf的定义是这样的:
intscanf(const char*format [,argument]...);
format
Format control string
argument
Optional arguments

他是const char* 型的。传入得参数不是指针,而是格式化的,编译器内部可能是将其的格式化后的内容传个函数。你的两个代码在VC6.0里都不能运行。你是将它的指针传入
追问
没发现int *i的位置和char a位置定义得有变化吗?我更希望有人你能从栈上去分析,为什么第一个在有些编译环境下就是可以运行的!c-free就可以使得第一程序正确运行出来!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
henchi2008
2013-03-27 · TA获得超过175个赞
知道答主
回答量:75
采纳率:0%
帮助的人:78.8万
展开全部
我用GDB跟了一下,两种写法确实有差异:
形式1中: i 被赋初值(int *) 0x7fffffffe7c0
scanf得到的整数输入将写入该地址,程序可以顺利结束。

形式2中: i 被赋初值(int *) 0x00
scanf得到的整数输入尝试写入非法地址,程序崩溃。

编译器可能有某些特殊规则导致了这两种写法的机器码差异。
追问
这么多人,终于有人去真正的去调式过了!不错!哥们,收到我的信件了吗!加一下!交流一下!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
2013-03-26 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:8160万
展开全部
不用推敲,这两段代码都不可能为*i赋值,因为i没有指向,是野指针!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夜神月YOONA
2013-03-26 · TA获得超过339个赞
知道小有建树答主
回答量:219
采纳率:0%
帮助的人:270万
展开全部
不要郁闷了,这2程序是一样的,要么都行,要么都不行。如果一个能编译,一个不能编译,建议你换个编译器。

就语法来说,2个程序都是错误的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
昭聊IT
2013-03-26 · TA获得超过366个赞
知道小有建树答主
回答量:293
采纳率:100%
帮助的人:173万
展开全部
注意,scanf("%d",i);这句话有问题,在使用scanf函数式注意其函数的参数的使用第一个参数为要输入的类型,后面为要输入数的所在内存单元的地址,应使用&i才可以,上面的两个程序都有问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式