
B. char *pscanf("%s",p)
C. char str[20]scanf("%s",&str[2])
D. char str[20],*p=strscanf("%s",p[2])
A:str是数组的名字,它单独出现时候代表的是该数组的首地址,
&用在变量前代表取其地址,对str这个地址取地址,不是程序想要的吧!
B:p做为一个指针,没有初始化.记住,指针一定要初始化后才能使用!
C:str[2]的意思其实是 *(str + 2),
所以&str[2]其实就是&*(str + 2),也就是str + 2,还是个地址,所以是正确的.
D. char str[20],*p=strscanf("%s",p[2])
:p[2]代表 *(p+2),代表第三个字符了
A对 字符数组赋值可以不用&,用了也是对的B错 只有一个指针,但是这个指针并未指向可用的空间。
C错 虽然程序运行没问题,但是这样做是从s[2]开始写入.s[0]和s[1]是随机值.
前面0~1元素的数据不确定会导致后面不能完整用str索引 ,获取不到正确值
D错 str是什么,如果前面初始化为char str[20],也是错的,因为p[2]是一个字符,不是地址
所以A对,C的话 可以运行,但是获取的值不对,看你怎么认为该选项对不对了
望采纳
D是正确的A,B中 p是n的地址 那么如果要输入n 应该是scanf("%d", p)
C中 p还没定义 给*p赋值就是给一个没有开辟的地址赋值了
D是正确的 意思是p为n的地址,将p地址上的数变成m, 等价于n=m
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)