又被指针卡住了
程序如下:
#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对结果产生影响。
[解决办法]
a=10
在你这道题是多余的
只要char a即可
给a分配内存
[解决办法]
1.这道题目输出应该是20,但是先前定义的a=10又有什么用呢?
初始化
2.a=10;对结果会有什么影响?
没影响,因为你后面用指针把a滴知改变了
3.如何才能使a=10对结果产生影响。
除非你把a=10放到printf滴前面
[解决办法]
再次定义*pa=20就是覆盖了a地址上面的数据了,等于重新定义了一个a=20.是这样理解的吗?
不是定义,而是将a地址上面的内容修改成了20,所以不会产生得复定义。
另外,这个例子中,a=10;这一句虽然对一道题目来说是没有影响的,但是对于一个编程者而言是有必要加的,并不是楼上所说的什么迷惑,编程并不是应试教育,不存在这种迷惑考生这种现象,这里a=10,是对a的初如化,虽然char a;这一句已经分配了a的地址,但是如果不初始化的话,a的内容是随机的。所以应该初始化,这是一种良好的编程习惯。
[解决办法]
等于重新定义了一个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;