又被指针卡住了

cray_swallow 2007-04-16 11:51:19
程序如下:
#include <stdio.h>
main()
{
char a,*pa;
a=10;
pa=&a;
*pa=20;
printf( “%d”, a);
}
这里先给比我更新的手一点小技巧:pa=&a读作:这是返回a变量的地址编号.而*pa读作:pa内容所指的地址的内容.这样有助于理解指针的含义。
我的问题是:
1.这道题目输出应该是20,但是先前定义的a=10又有什么用呢?
2.a=10;对结果会有什么影响?
3.如何才能使a=10对结果产生影响。
...全文
263 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cray_swallow 2007-04-16
  • 打赏
  • 举报
回复
嗯,谢谢大家的回答。
开始我也发现a=10是迷惑用的
但是,a=10如果说是初始化的话,真的是必需的吗?
WinWing 2007-04-16
  • 打赏
  • 举报
回复
1.这道题目输出应该是20,但是先前定义的a=10又有什么用呢?
练习题,用来迷惑你的.
2.a=10;对结果会有什么影响?
没有
3.如何才能使a=10对结果产生影响。
这个...

loongee 2007-04-16
  • 打赏
  • 举报
回复
嗯,如果是考试题的话a=10就有意义了。

老师专门来迷惑你的。
guanwl 2007-04-16
  • 打赏
  • 举报
回复
楼上已经把问题说清楚了. 我是来接分的.
ayw215 2007-04-16
  • 打赏
  • 举报
回复
1.这道题目输出应该是20,但是先前定义的a=10又有什么用呢?

初始化

2.a=10;对结果会有什么影响?

没影响,因为你后面用指针把a滴知改变了

3.如何才能使a=10对结果产生影响。

除非你把a=10放到printf滴前面
freshui 2007-04-16
  • 打赏
  • 举报
回复
要是a=10对结果影响

*pa+=20;

这样输出为30
freshui 2007-04-16
  • 打赏
  • 举报
回复
a=10
在你这道题是多余的
只要char a即可
给a分配内存
cray_swallow 2007-04-16
  • 打赏
  • 举报
回复
我太爱你们了~~~
有朝一日我成为高手也会学习你们这种乐于助人的精神。
我知道,大家上这里,除了聊天解闷,还有就是帮助新人以正确的道路和思想成长,而不仅仅是为了这点分数,试想,能回答这种问题的人,无论收入还是生活水平也不会低的。尤其是程序设计方面,基础一定要打好,还有就是思路要正确。
再次感谢大家的帮助
三中土豆 2007-04-16
  • 打赏
  • 举报
回复
不是重复定义,是重新赋值!
楼上正解!
cray_swallow 2007-04-16
  • 打赏
  • 举报
回复
谢谢ayw215() ,WinWingxxc028() ,尤其是wltg2001(红猪)你的这段话,算是听君一席言,胜读十年书了。恍然大悟!结贴结贴
0黄瓜0 2007-04-16
  • 打赏
  • 举报
回复
等于重新定义了一个a=20
===================
这句话以前的理解都是正确.但看了这句,你的理解是错误的.


char a;//这里是变量定义,也就是编译器会给一个存放char型变量的空间.
char *pa;//这里也会有一个存放char型指针的空间.
a=10; //在a代表的空间放入10
pa=&a;//在pa代表的空间放入a的地址.
*pa=20; //在pa指向的地方也就是a代表的空间放入20
printf( “%d”, a);

而重复定义是又定义一个以a代表的空间.
如又来个
int a;
或;char a;
double a;

wltg2001 2007-04-16
  • 打赏
  • 举报
回复
再次定义*pa=20就是覆盖了a地址上面的数据了,等于重新定义了一个a=20.是这样理解的吗?
不是定义,而是将a地址上面的内容修改成了20,所以不会产生得复定义。
另外,这个例子中,a=10;这一句虽然对一道题目来说是没有影响的,但是对于一个编程者而言是有必要加的,并不是楼上所说的什么迷惑,编程并不是应试教育,不存在这种迷惑考生这种现象,这里a=10,是对a的初如化,虽然char a;这一句已经分配了a的地址,但是如果不初始化的话,a的内容是随机的。所以应该初始化,这是一种良好的编程习惯。
cray_swallow 2007-04-16
  • 打赏
  • 举报
回复
但是我的理解是:a地址上的数据为10,pa=&a表示pa取了a的地址,而*pa就是表示地址为a的地址上的数据。从内存上来讲,a的地址已经有了数据为10,指针pa指向了a的地址,那也应该为10,再次定义*pa=20就是覆盖了a地址上面的数据了,等于重新定义了一个a=20.是这样理解的吗?而且这里是一个char形的a,不会产生重复定义马?
0黄瓜0 2007-04-16
  • 打赏
  • 举报
回复
2.a=10;对结果会有什么影响?

逻辑上告诉你,本来我的a=10,但我通过指针把它修改为a=20.
xxc028 2007-04-16
  • 打赏
  • 举报
回复
a=10如果说是初始化的话,真的是必需的吗?
我的个人理解如下:
就你这道程序而已,真的没有必要;但有时候还是有用的
char a;
如果你声明后,没有给它赋值 ,那a的值将不确定,这意味这该变量的值是它被创建前该内存单元的值。
zzyjsjcom 2007-04-16
  • 打赏
  • 举报
回复
a = 10 是必要的 假如没*pa=20;这条语句呢?

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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