C语言中关于printf和scanf里面&的讲究用法
#include<stdio.h>void main()
{
double a;
scanf("%lf",&a);
printf("%lf",a);
}
就是这么个小程序。。我真的分不清什么时候应该加&什么时候不加&。再加上指针那一块确实没学好。。。有大神能够讲讲吗???{:5_92:} scanf中要求的传入一个地址,所以需要&
printf只要传入变量名即可,所以不需要& 这个东西你可以这样理解一下,scanf用的时候,会用输入的值来修改参数的值,如果只用变量名的话,修改只能在scanf函数体内有效,相当于没用,所以要传入变量的地址,在函数内部修改地址指向的内容,间接修改变量的值。
而printf,不需要修改变量的值,只是把值输出,所以只需要传入变量的值,而不需要传入变量的地址。 本帖最后由 无符号整形 于 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 15:53
指针有什么用呢?
它就是用来可以给函数修改参数的东东(作用之一)。
比如:
那如果是数组呢??scanf和printf都不需要加&吗?? 哈哈哈的 发表于 2018-7-23 16:26
那如果是数组呢??scanf和printf都不需要加&吗??
嗯
数组本身就是指针,它指向一串连续的数据。 哈哈哈的 发表于 2018-7-23 16:26
那如果是数组呢??scanf和printf都不需要加&吗??
数组是指向第一个元素的指针 所以不用加& 好好看视频
页:
[1]