哈哈哈的 发表于 2018-7-23 15:25:34

C语言中关于printf和scanf里面&的讲究用法

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




就是这么个小程序。。我真的分不清什么时候应该加&什么时候不加&。再加上指针那一块确实没学好。。。有大神能够讲讲吗???{:5_92:}

BngThea 发表于 2018-7-23 15:26:43

scanf中要求的传入一个地址,所以需要&
printf只要传入变量名即可,所以不需要&

TyCk 发表于 2018-7-23 15:39:17

这个东西你可以这样理解一下,scanf用的时候,会用输入的值来修改参数的值,如果只用变量名的话,修改只能在scanf函数体内有效,相当于没用,所以要传入变量的地址,在函数内部修改地址指向的内容,间接修改变量的值。
而printf,不需要修改变量的值,只是把值输出,所以只需要传入变量的值,而不需要传入变量的地址。

无符号整形 发表于 2018-7-23 15:53:58

本帖最后由 无符号整形 于 2018-7-23 16:34 编辑

指针有什么用呢?{:10_254:}
它就是用来可以给函数修改参数的东东(作用之一)。
比如:
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仅仅是打印,不用修改,所以只需要字符的拷贝,无需指针。

哈哈哈的 发表于 2018-7-23 16:26:46

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


那如果是数组呢??scanf和printf都不需要加&吗??

无符号整形 发表于 2018-7-23 16:29:37

哈哈哈的 发表于 2018-7-23 16:26
那如果是数组呢??scanf和printf都不需要加&吗??


数组本身就是指针,它指向一串连续的数据。

冬意渐暖 发表于 2018-7-24 06:00:24

哈哈哈的 发表于 2018-7-23 16:26
那如果是数组呢??scanf和printf都不需要加&吗??

数组是指向第一个元素的指针 所以不用加&   好好看视频
页: [1]
查看完整版本: C语言中关于printf和scanf里面&的讲究用法