精华内容
下载资源
问答
  • 我的猜测是 因为引入指针的概念就必须引入地址的...而其他非指针类型的变量名就要取地址为什么没有这样做呢。。如果scanf取地址,而是用和地址一样大小的int型数据代替地址的话能顺利赋值吗?试一下先 源代码...

    我的猜测是
    因为要引入指针的概念就必须引入地址的概念
    而scanf这种赋值类的 就好像存东西也需要寄存柜的号码一样吧 也需要“地址”
    不过scanf这种取地址应该也是可以交给机器判断的,比如数组名本身是指针型的,本身就是地址,就不用取地址了
    而其他非指针类型的变量名就要取地址,为什么没有这样做呢。。如果scanf不取地址,而是用和地址一样大小的int型数据代替地址的话能顺利赋值吗?试一下先
    源代码

    #include<stdio.h>
    int main()
    {
    int a,b;
    a=&b;
    scanf("%d",a);
    printf("%d",b);
    return 0;
    }
    
    

    输入输出

    32
    32
    

    答案是阔以的
    这样的&“取地址”其实给我们提供了更多的可能性
    并不只是“坑爹”害我出错的东西
    c语言本身妹有问题
    有问题的是老是打错的我吧。。
    而printf平时打印变量不用取地址就是因为
    printf也是可以打印地址的,只要加上取地址符号就行了
    all in all
    这样的c语言
    更好的区分开了
    地址和变量

    展开全文
  • 参考这个回答。 int a; scanf("%d",&a); 采用取地址是为了改变a的值,按照上述回答可以知道,若采用变量名a,a的值仅在scanf这...为了让a的值发生彻底待变,需要在scanf()函数中采用取地址值让a的值发生改变。

    参考这个回答

    int a;

    scanf("%d",&a);

    采用取地址是为了改变a的值,按照上述回答可以知道,若采用变量名a,a的值仅在scanf这个函数中发生改变,函数之外的a值没有变化,也就是说a的值并不是最终键盘上输入的值。为了让a的值发生彻底待变,需要在scanf()函数中采用取地址值让a的值发生改变。

    展开全文
  • scanf();为什么要取地址

    千次阅读 2017-12-09 17:49:59
    scanf(“格式控制字符串”, 地址表列); 其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表列中给出各变量的地址地址是由地址运算符“&”后跟变量名组成的...
    scanf(“格式控制字符串”, 地址表列);
    其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。
    例如:&a、&b分别表示变量a和变量b的地址。
    这个地址就是编译系统在内存中给a、b变量分配的地址。在C语言中,使用了地址这个概念,这是与其它语言不同的。 应该把变量的值和变量的地址这两个不同的概念区别开来。变量的地址是C编译系统分配的,用户不必关心具体的地址是多少。
    变量的地址和变量值的关系
    在赋值表达式中给变量赋值,如:
    a=567;
    则,a为变量名,567是变量的值,&a是变量a的地址。
    但在赋值号左边是变量名,不能写地址,而scanf函数在本质上也是给变量赋值,但要求写变量的地址,如&a。这两者在形式上是不同的。&是一个取地址运算符,&a是一个表达式,其功能是求变量的地址。
    展开全文
  • Q: 同样是整数参数, 为什么printf只需要传入参数本身... 而scanf, 传入的参数是值传递, 没办法修改到原变量,所以必须要取地址. Mac Libc: 以int为例, 最后是从参数中取int *, 然后存入输入的数据res. C...

    Q: 同样是整数参数, 为什么printf只需要传入参数本身,而scanf需要取地址?

    A: printf只需要获得参数数值,scanf需要修改变量的能力!

        从技术的角度, printf一样可以强制要求取地址, 内部多一道解引用取出数值, 所以没必要!

        而scanf, 传入的参数是值传递, 没办法修改到原变量,所以必须要取地址.

        Mac Libc:

             

          以int为例, 最后是从参数中取int *, 然后存入输入的数据res.

     

        C++引用

          C++引入了引用, 它相当于从编译器角度解决了程序员判断传值或者传地址的困扰. 新技术抽象和编译器加强是不断解放程序员烦恼的有效手段. 

          当然, 新技术也不是可以任意解决程序员的诉求, 一定也要遵循语言的标准和限制.

             比如, 用cin输入数据, 编译器检测到cin, 对比函数原型是引用, 自动明白是"输入"数据, 内部会转换成地址. 

     

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	int n;
    
    	cin >> n;
    	cout << n << endl;
    
    	return 0;
    }
    

     汇编如下:

    leaq 0xf8(%rbp), %rsi

      -> leaq取地址存到%rsi, %rsi是int &的参数.

     

    作者:     陈曦
    环境:     MacOS 10.14.5
             Apple LLVM version 10.0.1 (clang-1001.0.46.4)
             Target: x86_64-apple-darwin18.6.0
     
    转载请注明出处

     

    展开全文
  • scanf为什么有时用取地址符,有时不用---取址符:&

    千次阅读 多人点赞 2014-07-31 11:44:55
    问:char nama[40];...答:因为a是个整型变量名,所以SCANF要取得这个变量在内存中的地址;而name是char数组,name本身指向这个数组首地址。也就是说a里面保存的是内容,name里保存的本身就是个地址
  • 首先在C语言中,输入变量的语法是:scanf("格式控制",...为了得到变量的地址,需要在变量前加一个&(称为取地址运算符),也就是“&变量名”的写法。 补充:常见数据类型变量的scanf格式符 数据类型 格
  • 版权声明:本文为作者原创文章,未经博主允许不得转载。  许多初学C语言的小伙伴对这个操作符并不陌生,似乎它的用法也不怎么难。... 为什么一个scanf()就非用&amp;?  为什么有的函数传参时传入地...
  • scanf的理解

    2018-02-27 11:27:08
    为什么scanf要地址引用符我在看到这个函数的时候,第一反应是为什么不直接写成scanf("%d",a);的形式,偏偏要用scanf("%d",&amp;a);后来发现,那是你在申明变量的时候,后面引用该变量给它...
  • C语言_scanf函数理解

    2018-03-18 11:41:45
    因为平常不怎么用C语言,好多东西都忘了,看到scanf()时,竟一时想不起为什么要对变量取地址。看一个最简单的scanf()函数例子#include&lt;stdio.h&gt; int main() { int a; scanf("%d", &...
  • 这是一个很简单的输入语句,我想问的是,a前面为什么要加&呢。 %d格式符表示的是整数类型,但是后面的a前面加上&的话就是整数指针类型了。 因为有取地址符号嘛。二者类型没有统一。求大佬们解答
  • 2017.12.02.C语言总结

    2017-12-04 22:48:31
    指针变量指针可以引出几个概念,指针变量... 取地址运算符&是单目运算符,其结合性自右至左,其功能是取变量的地址。scanf函数及前面介绍指针变量赋值中,我们已经了解并使用了&运算符。 (2)取内容运算符*  取内容
  • 9.1.4 指针与数组:为什么数组函数之后的sizeof不对了 9.1.5 指针与const:指针本身和所指的变量都可能const(本节只适用于c99) 9.1.1 取地址运算:&运算符取得变量的地址 scanf里一定加&(运算符) 作用...
  • // &代表取地址 if (strcmp(name,temp->item->name) == 0) { result = temp; } else { temp = temp->firstChild; while(temp != NULL) { QUEUEenqueue(que,temp); temp = temp->nextSibling; } } } /*...
  • 字符、字符串输入格式总结

    千次阅读 2013-06-20 13:37:41
    这是最基本的输入一个字符的函数,注意到ch前面有个&,它表示取地址为什么要带上取地址,很明显嘛,就是你从键盘读入一个字符放到ch的家里面(也就是它的住处嘛), 请记住这个函数的返回值。他返回我们输入的...
  • C 语言学习

    2017-09-25 09:43:07
    (2)为什么输出函数不需要用取地址符&而输入函数需要用取地址符&呢? 答:因为输入函数再给相应的数据类型输入数值的需要找到其变量名对应分配的地址,再在地址上写上数值。而输出函数就不需要找到对应的地址书写...
  • 疑难杂症

    2016-07-30 19:17:09
    //这里&(取地址符) 第二,为什么第二个会被忽略的问题是因为,第一次输入的时候,回车键会滞留在输入缓冲区,第二次要去输的时候,会直接去读回车键 在第二次要去输入的时候,可以先清除缓冲区,用getchar(),...
  • !...书中说形参(pointer是一个指向包含4个元素的一位数组指针这我能理解) 1.但是为什么(score[][4]明明是个二维... /*这里为什么要加*pointer所指向的元素(pointer不是自己的值就是地址吗)*/ return(pt); } ```
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...
  • 比较详实 第三章: C语言程序设计初步 C语言程序设计 本课介绍C语言程序设计的基本方法...&是一个取地址运算符,&a是一个表达式,其功能是求变量的地址。 void main(){ int a,b,c; printf("input a,b,c\n"); scanf...
  • 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...
  • o 3.11 为什么 sizeof 返回的值大于结构的期望值, 是不是尾部有填充? o 3.12 如何确定域在结构中的字节偏移? o 3.13 怎样在运行时用名字访问结构中的域? o 3.14 程序运行正确, 但退出时却 ``core dump''了,...
  • 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof不到数组的大小? 42 声明问题 43 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 43 *1.26 main的正确定义...
  • 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof不到数组的大小? 42 声明问题 43 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 43 *1.26 main的正确定义...
  • 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof不到数组的大小?  声明问题  1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。  *1.26 main的正确定义是...
  •  1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是...

空空如也

空空如也

1 2
收藏数 34
精华内容 13
关键字:

为什么scanf要取地址