刚学指针 求解一下
#include<stdio.h>#include<string.h>
void main()
{
int a;
int *c=&a;
scanf("%d",&a);
printf("%d %d\n",a,*c);
scanf("%d",c);
printf("%d %d\n",a,*c);
}
第一次输入3 打印出2个3 我能理解
第二次输入5 打印出2个5,*c取值变成5我理解,但是为什么a也会变成5?? 本来就是啊
改变指针指向的地址的值,指针所指向的那个变量的值也会被改变(因为他俩是一个地址) 楼上正解 楼上说得对 我也是小白,刚学没多久。下面的代码可能会帮助你理解,分别输出它们的地址,也就是说在内存里面他们属于同一个空间
#include<stdio.h>
int main()
{
int a=5,*b;
b=&a;
printf("%d\n",&a);
printf("%d",b);
} 操作的是指针(地址)啊,不是变量啊。 我觉得先不讲什么原理,简单套下公式就能理解呀
如果你觉得
scanf("%d",&a);
这个是完全理解的,没有半点问题的
那么 现在
int* c=&a;
这个代码不知道你认不认可?
如果认可的话,先不管什么 类型,也就是c=&a;
既然相等,也就是 &a 可以用c了替代
也就是 scanf("%d",&a); 与 scanf("%d",c); 相同,应该没意见吧
如果没意见,你说你 第一次输入3 打印出2个3 我能理解
那么有什么不理解 第二次输入5 打印出2个5,和第一次的操作有啥区别呢?
接着,我们稍微带上理论
你要明白 scanf 处理的是变量地址而不是变量 不然不会用&a 来作为参数
变量是c是啥,是一个int型的指针,也就是int型变量地址,scanf 需要传递的就是一个指针,他通过指针来找到对应的变量,然后修改对应位置上变量的值这句话你要体会下,他转了一个弯,不是你传递啥他就修改啥,是你传递了一个变量的地址,它通过变量的地址找到对应的变量,然后改变变量的值,
不管是
scanf("%d",&a);
还是
scanf("%d",c);
你都满足要求,不然你觉得编译的时候不会报错吗?
页:
[1]