鱼C论坛

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

[已解决]C语言中关于printf和scanf里面&的讲究用法

[复制链接]
发表于 2018-7-23 15:25:34 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
void main()
{
        double a;
        scanf("%lf",&a);
        printf("%lf",a);
}




就是这么个小程序。。我真的分不清什么时候应该加&什么时候不加&。再加上指针那一块确实没学好。。。有大神能够讲讲吗???
最佳答案
2018-7-23 16:29:37
哈哈哈的 发表于 2018-7-23 16:26
那如果是数组呢??scanf和printf都不需要加&吗??


数组本身就是指针,它指向一串连续的数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-23 15:26:43 | 显示全部楼层
scanf中要求的传入一个地址,所以需要&
printf只要传入变量名即可,所以不需要&
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-23 15:39:17 | 显示全部楼层
这个东西你可以这样理解一下,scanf用的时候,会用输入的值来修改参数的值,如果只用变量名的话,修改只能在scanf函数体内有效,相当于没用,所以要传入变量的地址,在函数内部修改地址指向的内容,间接修改变量的值。
而printf,不需要修改变量的值,只是把值输出,所以只需要传入变量的值,而不需要传入变量的地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-23 15:53:58 | 显示全部楼层
本帖最后由 无符号整形 于 2018-7-23 16:34 编辑

指针有什么用呢?
它就是用来可以给函数修改参数的东东(作用之一)。
比如:
void func(int i)
{
i = 6
}
int main()
{
int a = 0;
func(a);
return 0;
}
你觉得func()会修改成功吗?答案是不能。
为什么呢?因为这个参数是被拷贝过去的,在内存中的地址和a不同,而且这块内存在函数执行完毕后会释放。
那么如何修改呢?可以使用指针(指针指向这个变量的地址,于是就可以顺藤摸瓜来修改)
void func(int* i)
{
*i = 6
}
int main()
{
int a = 0;
func(&a);
return 0;
}
注意 那里使用了&,是为了取地址。指针实际上指向一个地址。假如没有&,那么指针会指向变量的值(比如a是0,那么指针会指向地址为0的内存块,为了防止这种误操作编译器一般不允许这么做)。
scanf printf同理。
scanf要用用户输入的字符填充你的变量,自然需要指针。
printf仅仅是打印,不用修改,所以只需要字符的拷贝,无需指针。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-23 16:26:46 | 显示全部楼层
无符号整形 发表于 2018-7-23 15:53
指针有什么用呢?
它就是用来可以给函数修改参数的东东(作用之一)。
比如:

那如果是数组呢??scanf和printf都不需要加&吗??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-23 16:29:37 | 显示全部楼层    本楼为最佳答案   
哈哈哈的 发表于 2018-7-23 16:26
那如果是数组呢??scanf和printf都不需要加&吗??


数组本身就是指针,它指向一串连续的数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-24 06:00:24 From FishC Mobile | 显示全部楼层
哈哈哈的 发表于 2018-7-23 16:26
那如果是数组呢??scanf和printf都不需要加&吗??

数组是指向第一个元素的指针 所以不用加&   好好看视频
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-30 02:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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