scanf为什么要加地址符,printf和scanf函数为什么一个要取地址符一个不用呢

1 , printf和scanf函数为什么一个要取地址符一个不用呢因为scanf的取得一个字符,然后把这个字符存放到某一内存区域,所以要为它(字符)分配存储空间 。printf的输出一个字符 。输出的时候系统根据变量名(外部标识符)在内存中找到与之相匹配的字符进行输出操作 。所以不用取地址符 。你用scanf输入的时候,是要在函数内对变量值进行修改的 。而printf输出的时候,只用到变量的值,不必在函数内改变变量的值 。如果是普通的函数参数传递,比如传递a,变量接收的方式是在函数内另外建立一个变量,假设是b , 然后把a的值传递给b就可以了 。这样如果对b的值进行修改,不影响原来的a 。传地址则可以通过操作改变实参的值,比如把a的地址p1传递到函数中,函数中p2接收到了a的地址 , 因为p2指向的是a的地址,所以对p2地址指向的内容修改,就对原来的变量a修改了因为scanf的取得一个字符,然后把这个字符存放到某一内存区域,所以要为它(字符)分配存储空间 。printf的输出一个字符 。输出的时候系统根据变量名(外部标识符)在内存中找到与之相匹配的字符进行输出操作 。所以不用取地址符 。楼主不明白请追问 。如果某个函数要修改其它函数当中的变量,就必须要得到该变量的地址scanf的目的是修改变量的值,因此必须知道地址;printf的目的是输出变量的值,因此只知道变量的值就够了输出与变量的值有关 , 输入与变量的地址有关printf是输出,不用...因为你调用它时已经把要输出的数据用形参的方式传送给它了scanf是输入,形参可以说是局变量,函数执行完后就没了,传了地址让它保存到指定地址,这样数据就可保存了!【scanf为什么要加地址符,printf和scanf函数为什么一个要取地址符一个不用呢】
2 , c语言 scanf为什么要用来取地址因为scanf要往你的变量里写入数值,所以他必须知道那个变量的地址,至于变量里存的是什么值,他百是不管的 , 反正他写入之后就被覆盖成新的值了对比printf,他是要输出变量里的数值,他只管要那个值,至于地址在哪,他也无所谓这就是写和读的本质性区别,写只要地址,读只要值变量其实同时有地址和值两个东西,我们一般用一个变量 , 都是直接度写一个名字,其实如果这个名字在赋值号右边 , 就是代表值,如果在赋值号左边,就是代表地址,写出来一样 , 意义是不一样的,编译器自动帮你选择了正确的意义变量名字写在函数参数里面时 , 内和写在赋值号容右边一样,也是代表值,可是像scanf这种函数,他确实需要地址 , 编译器只认识赋值号,不认识scanf , 没法自动选到正确的东西,这时就需要你手动加一个取地址的符号&,明确告诉编译器去选择变量的地址给这个scanf来用scanf(“格式控制字符串”, 地址表列);其中 , 格式控制字符串的作用与printf函数相同,但不能显示非格式字符串 , 也就是不能显示提示字符串 。地址表列中给出各变量的地址 。地址是由地址运算符“&”后跟变量名组成的 。例如:&a、&b分别表示变量a和变量b的地址 。这个地址就是编译系统在内存中给a、b变量分配的地址 。在c语言中,使用了地址这个概念 , 这是与其它语言不同的 。应该把变量的值和变量的地址这两个不同的概念区别开来 。变量的地址是c编译系统分配的,用户不必关心具体的地址是多少 。变量的地址和变量值的关系在赋值表达式中给变量赋值,如:a=567;则,a为变量名,567是变量的值,&a是变量a的地址 。但在赋值号左边是变量名 , 不能写地址,而scanf函数在本质上也是给变量赋值 , 但要求写变量的地址,如&a 。这两者在形式上是不同的 。&是一个取地址运算符 , &a是一个表达式,其功能是求变量的地址 。
3,c语言 scanf为什么要用取地址符scanf(“格式控制字符串”, 地址表列);其中 , 格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串 。地址表列中给出各变量的地址 。地址是由地址运算符“&”后跟变量名组成的 。例如:&a、&b分别表示变量a和变量b的地址 。这个地址就是编译系统在内存中给a、b变量分配的地址 。在C语言中,使用了地址这个概念,这是与其它语言不同的 。应该把变量的值和变量的地址这两个不同的概念区别开来 。变量的地址是C编译系统分配的,用户不必关心具体的地址是多少 。变量的地址和变量值的关系在赋值表达式中给变量赋值,如:a=567;则,a为变量名,567是变量的值,&a是变量a的地址 。但在赋值号左边是变量名,不能写地址,而scanf函数在本质上也是给变量赋值 , 但要求写变量的地址,如&a 。这两者在形式上是不同的 。&是一个取地址运算符,&a是一个表达式,其功能是求变量的地址 。因为scanf本来就是一个函数scanf本来就是一个函数,用取地址后就能将接受的数据存在这个地址里,在scanf函数外也能用 。指针在函数内就是通过访问所指向地址的值来进行改写,并且能延续到函数外 。因为scanf要往你的变量里写入数值,所以他必须知道那个变量的地址,至于变量里存的是什么值,他是不管的,反正他写入之后就被覆盖成新的值了对比printf,他是要输出变量里的数值,他只管要那个值 , 至于地址在哪,他也无所谓这就是写和读的本质性区别,写只要地址,读只要值变量其实同时有地址和值两个东西,我们一般用一个变量,都是直接写一个名字,其实如果这个名字在赋值号右边 , 就是代表值,如果在赋值号左边 , 就是代表地址,写出来一样 , 意义是不一样的,编译器自动帮你选择了正确的意义变量名字写在函数参数里面时,和写在赋值号右边一样,也是代表值,可是像scanf这种函数,他确实需要地址,编译器只认识赋值号,不认识scanf,没法自动选到正确的东西,这时就需要你手动加一个取地址的符号&,明确告诉编译器去选择变量的地址给这个scanf来用因为scanf这个函数要求的参数传递的是地址?。『停篿nt scanf(const char *format,...);其调用形式为: scanf("<格式说明字符串>",<变量地址>);变量地址要求有效,并且与格式说明的次序一致 。

    推荐阅读