设 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 11:13:32 浏览: 16
选项 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。
相关问题
char s[5]="abcdef";为什么错,怎么改成正确的
这段代码的问题在于字符串数组 `s` 的长度不足以存储字符串 `"abcdef"`,因为字符串长度为 6,但数组长度只有 5。这会导致数组越界,产生未定义行为。
要改正这个问题,可以将数组长度增加到 6 或更多,例如:
```c++
char s[7] = "abcdef";
```
这样可以确保数组有足够的空间存储字符串。另外,可以省略数组长度,让编译器自动计算字符串长度,例如:
```c++
char s[] = "abcdef";
```
这样编译器会自动根据字符串长度分配足够的空间给数组。
取消 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` 的长度,同样无法完全初始化。