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所代表的内存地址,
那么为什么可以吧数据存入字符串所在的内存区域呢?
为这么这里必须加取地址符? --- scanf的库函数的语法规定,如果你来写scanf函数,那你可以规定成不需要
而这里加或不加取地址符都可以? --- 你用的%p基本没见过这种写法,没啥意义
同2,后面没研究的必要了
那个我写错了 是%s
写1只是为了后面的问题铺垫
后面的问题3333333333才是我想问的
输入错了你都还能问,说明你自己没测试,这叫纸上谈兵
本回答被网友采纳