设 char s[10]="abcdef"; *p = s; 以下不正确的表达式是() A. *p ='w'; B. s[2] = s[4]; C. s = s + 5; D. p = s + 5;
时间: 2024-05-18 17:13:31 浏览: 24
选项 C 和 D 都不正确。
首先,定义了一个长度为 10 的字符数组 `s`,并将其初始化为字符串 `"abcdef"`。然后,定义了一个字符指针 `p`,并将其赋值为指向数组 `s` 的第一个元素的地址。
因为指针 `p` 指向了数组 `s` 的第一个元素,所以可以使用 `*p` 来表示数组 `s` 的第一个元素,即字符 `'a'`。
选项 A 中的赋值语句 `*p = 'w';` 将字符 `'w'` 赋值给了指针 `p` 所指向的内存地址,即数组 `s` 的第一个元素。这样,数组 `s` 的内容变成了 `"wbcdef"`,选项 A 正确。
选项 B 中的赋值语句 `s[2] = s[4];` 将数组 `s` 的第 4 个元素(即字符 `'e'`)赋值给了数组 `s` 的第 2 个元素(即字符 `'c'`)。这样,数组 `s` 的内容变成了 `"abedef"`,选项 B 正确。
选项 C 中的表达式 `s = s + 5;` 将数组 `s` 的地址加上 5,然后将结果赋值给数组 `s`。但是,数组名 `s` 是一个常量指针,不能修改其值。因此,选项 C 不正确。
选项 D 中的赋值语句 `p = s + 5;` 将数组 `s` 的地址加上 5,然后将结果赋值给指针 `p`。这样,指针 `p` 就指向了数组 `s` 的第 6 个元素,即字符 `'f'`。因此,选项 D 不正确。
因此,不正确的表达式是选项 C 和 D。
相关问题
#include <stdio.h> int main() { char a[]="ABCDEF"; char *p; p=a; *p++=a[4]; *p=*(p+4); printf("%s,%s",a,p); return 0; }
这段代码的输出结果是 "ABCDFF,FFDFF"。
代码中的变量 a 是一个字符数组,它的初始值是 "ABCDEF"。变量 p 是一个字符指针,它被赋值为 a 的地址。
接下来的两行代码,可以解读为 "把 a[4] 的值 'E' 赋值给 *p,然后把 p 指针后移一位"。
第三行代码中,p 指针已经指向了 a[1],所以第一个 *p++ 的结果是把 'E' 赋值给了 a[1]。然后 p 指针后移一位,指向了 a[2]。
第四行代码中,把 *(p+4) 的值 'F' 赋值给了 *p,也就是 a[2]。
最后一行代码中,第一个 %s 对应的是 a 数组,第二个 %s 对应的是 p 指针指向的字符串。所以输出的结果是 "ABCDFF,FFDFF"。
取消 C 保存 下列对数组s的初始化,其中不正确的是 A. char s5 二 a', ’'}; B. char s[5]=abg;, C. char s[5]= D. char s[5]="abcdef";
在 C 语言中,字符串是以空字符 `\0` 结尾的字符数组。因此,对于字符数组的初始化,最后一个元素必须是空字符 `\0`。
在给出的选项中,有两个选项没有给出空字符 `\0`,它们分别是:
B. `char s[5]="abg";`
C. `char s[5]= { 'a', 'b', 'c', 'd', 'e', 'f' };`
因此,选项 B 和 C 都是不正确的,其中选项 B 是非法的,因为字符数组 `s` 的长度是 5,但是初始化字符串 `"abg"` 的长度是 3,不包括空字符 `\0`,所以无法完全初始化字符数组 `s`。选项 C 中也给出了 6 个字符,超过了字符数组 `s` 的长度,同样无法完全初始化。
阅读全文