鱼C论坛

 找回密码
 立即注册
查看: 1100|回复: 6

刚学指针 求解一下

[复制链接]
发表于 2020-7-13 11:51:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-13 12:03:30 | 显示全部楼层
本来就是啊
改变指针指向的地址的值,指针所指向的那个变量的值也会被改变(因为他俩是一个地址)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-13 12:07:43 | 显示全部楼层
楼上正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-13 13:14:29 | 显示全部楼层
楼上说得对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-13 13:22:14 | 显示全部楼层
我也是小白,刚学没多久。下面的代码可能会帮助你理解,分别输出它们的地址,也就是说在内存里面他们属于同一个空间
#include<stdio.h>
int main()
{
int a=5,*b;
b=&a;
printf("%d\n",&a);     
printf("%d",b);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-14 08:29:44 | 显示全部楼层
操作的是指针(地址)啊,不是变量啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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);
你都满足要求,不然你觉得编译的时候不会报错吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 07:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表