有梦想大蜗牛 发表于 2020-7-13 11:51:35

刚学指针 求解一下

#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??

qiuyouzhi 发表于 2020-7-13 12:03:30

本来就是啊
改变指针指向的地址的值,指针所指向的那个变量的值也会被改变(因为他俩是一个地址)

永恒的蓝色梦想 发表于 2020-7-13 12:07:43

楼上正解

lhgzbxhz 发表于 2020-7-13 13:14:29

楼上说得对

言零 发表于 2020-7-13 13:22:14

我也是小白,刚学没多久。下面的代码可能会帮助你理解,分别输出它们的地址,也就是说在内存里面他们属于同一个空间
#include<stdio.h>
int main()
{
int a=5,*b;
b=&a;
printf("%d\n",&a);   
printf("%d",b);
}

肥你个橙c 发表于 2020-7-14 08:29:44

操作的是指针(地址)啊,不是变量啊。

4goodworld 发表于 2020-7-15 14:20:58

我觉得先不讲什么原理,简单套下公式就能理解呀

如果你觉得
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]
查看完整版本: 刚学指针 求解一下