c语言题,

来源:百度知道 编辑:UC知道 时间:2024/09/28 14:27:36
以下正确的程序段是______。
A) char str[20]; B) char *p;
scanf(“%s”,&str); scanf(“%s”,p);
C) char str[20]; D) char str[20] ,*p=str;
scanf(“%s”,&str[2]); scanf(“%s”,p[2]);
以下程序运行结果是______。
char str[ ]=“ABC”,*p=str;
printf(“%d\n”,*(p+3));
A) 67 B) 0 C) 字符‘C’的地址 D) 字符‘C’
第一道题答案是c,第二道题答案是c,能否帮我解释一下为什么吗?我不太明白,谢谢

第一题
A:数组名字str本身就是地址所以scanf(“%s”,&str); 中不必加“&”号
B:*p是指针scanf(“%s”,p); 之前没有进行初始化,不知它指向的是哪段内存,所以这样用是很危险的
C:对,将字符串从str的第3个元素开始存入str
D:未定义p是啥,该选项纯属乱来,如有雷同纯属巧合。若是定义了的话,就是说scanf(“%s”,p[2]); 应该为scanf(“%s”,&p[2]);
第二题
是答案说的c么,那就把那本书撕了,简直乱来。这题选B因为*(p+3)是指str[3]的元素应为“\0”以“%d”形式打印的话就是0了

我回答第二道题:*p=str;表示把数组str的首地址付给*p,也相当于*p=A,然后*(p+3)就是把p往后异3位。所以就是C了。

第一选C ,第二选B