| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 593 人关注过本帖
标题:关于指针的输出,请教各位大师
只看楼主 加入收藏
xiaoliang_sh
Rank: 2
等 级:论坛游民
帖 子:18
专家分:11
注 册:2010-7-16
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:6 
关于指针的输出,请教各位大师
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
   char *a ;
   printf("%d %d",a,&a);
   scanf("%s",&a);
   printf("%d %d %s",a,&a,&a);
   system("pause");

    return 0;
}
请教各位,这个完全可以成功编译并且运行,可是奇怪的事情是,前后两次printf,a的地址不同,但是&a的地址却一样,为啥可以打印出输入的字符串呢?
照理如果可以打印,应该是把字串符首地址赋值给&a才对嘛
搜索更多相关主题的帖子: 指针 大师 输出 
2010-07-19 15:58
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:6 
你这个程序能运行  一定是出于运气 我们一行一行的说
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
   char *a ;//这个a没有初始化,就是一个随机值,即指向的是野指针
   printf("%d %d",a,&a);//前一个%d赋值给了一个a随机指向的地址(也就是上面的野指针的位置),后一个你把%d赋值给了指针变量a
   scanf("%s",&a);//这一句你直接把字符串赋给了以指针变量a的地址开始的一段内存
   printf("%d %d %s",a,&a,&a);//第一个%d访问了一个a指向随机的地址,第二个%d输出了a的地址,第三个%s你就是输出了以a地址开头的一段内存
   system("pause");

    return 0;
}
你厉害~~~在下实在是佩服
2010-07-19 16:29
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:6 
看了2楼的回复,觉得有几个地方似乎不对。发表一点自己的想法,共同探讨:

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
   char *a ;                //这个a没有初始化,就是一个随机值,即指向的是野指针
   printf("%d %d",a,&a);    //分别打印出随机分配a的地址,和指针a的地址(即地址的地址)
   scanf("%s",&a);           //这一句你直接把字符串赋给了以指针变量a的地址开始的一段内存
   printf("%d %d %s",a,&a,&a);//第一个%d打印了系统随机分配给a地址,第二个%d输出了a的地址(地址的地址),第三个%s你就是输出了以a地址开头的一段内存
   system("pause");

    return 0;
}
2010-07-19 17:02
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:0 
我把printf堪称scanf了  
2010-07-19 17:08
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:6 
这样解释吧。char *a;其实a的地址是分配了,但a指向的地址随机。我们一般可以这样写char *a = NULL,或者char *a = (char*)malloc(sizeof(char)),这样就为a分配了指向的地址。scanf("%s", a)就行了,不需要&a。
2010-07-19 17:13
xiaoliang_sh
Rank: 2
等 级:论坛游民
帖 子:18
专家分:11
注 册:2010-7-16
收藏
得分:0 
谢谢各位,正规的方法我知道怎么写,但是我想知道为啥这个可以成功运行
2010-07-20 11:29
xiaoliang_sh
Rank: 2
等 级:论坛游民
帖 子:18
专家分:11
注 册:2010-7-16
收藏
得分:0 
还有就是如果这样改了是无法成功运行的char *a = NULL scanf("%s", a),为啥
2010-07-20 11:35
快速回复:关于指针的输出,请教各位大师
数据加载中...
 
   



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

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