C语言基础问题

int i;
scanf("%p", &i);
为这么这里必须加取地址符?

char arr[10] = "hello";
scanf("%p", arr);
scanf("%p", &arr);
而这里加或不加取地址符都可以?

1.变量是内存中特定空间的别名
2.变量i所代表的的内存空间中保存的是整数,只有获取变量i所代表的内存空间地址才能往该内存空间存入数据

那么问题来了 :
1.scanf("%p", arr);
arr保存的是堆存中字符串"hello"的首地址,
不加&获取的是变量arr所代表的内存区域的中的数据,即字符串"hello"的首地址
因而可以往"hello"所在的内存中存入数据
2.scanf("%p", &arr);
加&获取的是变量arr所代表的内存的地址
既然获取的变量arr所代表的内存地址,
那么为什么可以吧数据存入字符串所在的内存区域呢?

第1个回答  2016-12-18

    为这么这里必须加取地址符? --- scanf的库函数的语法规定,如果你来写scanf函数,那你可以规定成不需要

    而这里加或不加取地址符都可以? --- 你用的%p基本没见过这种写法,没啥意义

    同2,后面没研究的必要了

追问

    那个我写错了  是%s

    写1只是为了后面的问题铺垫

    后面的问题3333333333才是我想问的

追答

输入错了你都还能问,说明你自己没测试,这叫纸上谈兵

本回答被网友采纳
第2个回答  2023-06-10
重点是scanf函数需要参数必须是“指针”,所以&i是必须有&的,而对于数组arr而言,C语言做了特殊处理,下面表达式都是可以等价的作为指针使用的
&arr
&arr[0]
arr
相似回答