单选题
1、第102题 (1.0分) 题号:544 char *s1=“hello”,*s2;s2=s1;则()。
A
s2指向不确定的内存单元
B
不能访问”hello”
C
puts(s1);与puts(s2);结果相同
D
s1不能再指向其它单元
答案解析
正确答案:C
解析:
这是一道关于 C 语言指针基础知识的题目。我们需要分析代码 `char *s1="hello", *s2; s2=s1;` 的执行过程及结果,从而判断各个选项的正确性。
### 代码分析
1. **`char *s1 = "hello";`**
* 定义了一个字符指针变量 `s1`。
* 字符串常量 `"hello"` 存储在静态存储区(只读数据区)。
* `s1` 被初始化为指向该字符串常量的首地址(即字符 `'h'` 的地址)。
2. **`*s2;`**
* 定义了一个字符指针变量 `s2`,此时 `s2` 未初始化,其值是不确定的(野指针)。
3. **`s2 = s1;`**
* 将指针 `s1` 的值(即 `"hello"` 的首地址)赋值给指针 `s2`。
* 执行后,`s2` 也指向了字符串常量 `"hello"` 的首地址。
* 此时,`s1` 和 `s2` 指向内存中的同一个位置。
### 选项逐一解析
* **A. s2指向不确定的内存单元**
* **错误**。在执行 `s2 = s1;` 之后,`s2` 明确指向了 `s1` 所指向的地址,即字符串 `"hello"` 的起始位置。只有在定义 `s2` 后、赋值前,`s2` 才指向不确定单元。题目问的是整个语句执行后的状态。
* **B. 不能访问”hello”**
* **错误**。`s1` 和 `s2` 都指向 `"hello"`,可以通过 `*s1`、`*s2` 或者以它们为参数的字符串处理函数(如 `printf`, `puts`)来访问该字符串的内容。
* **C. puts(s1);与puts(s2);结果相同**
* **正确**。
* `puts()` 函数的作用是输出一个字符串并换行,它接收一个指向字符串首字符的指针作为参数。
* 因为 `s1` 和 `s2` 指向同一个字符串 `"hello"` 的首地址,所以 `puts(s1)` 会输出 `hello`,`puts(s2)` 也会输出 `hello`。两者的输出结果完全相同。
* **D. s1不能再指向其它单元**
* **错误**。`s1` 是一个指针变量,变量的值是可以改变的。虽然它当前指向字符串常量,但我们可以随时通过赋值操作让 `s1` 指向其他合法的内存地址(例如 `s1 = "world";` 或 `s1 = s2;` 等)。这里并没有任何机制锁定 `s1` 使其不可变。
### 结论
综上所述,只有选项 C 描述是正确的。
**正确答案:C**
题目纠错
c语言选择判断题库
相关题目
单选题
1、第157题 (1.0分) 题号:717 fscanf函数的正确调用形式是()。
单选题
1、第156题 (1.0分) 题号:653 以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()。
单选题
1、第155题 (1.0分) 题号:604 下面不正确的字符串常量是()。
单选题
1、第154题 (1.0分) 题号:723 函数调用语句:fseek(fp,-20L,2);的含义是()。
单选题
1、第153题 (1.0分) 题号:683 在C语言中,要求运算数必须是整型或字符型的运算符是()。
单选题
1、第152题 (1.0分) 题号:698 整型变量x和y的值相等、且为非0值,则以下选项中,结果为零的 表达式是()。
单选题
1、第151题 (1.0分) 题号:695 以下叙述中不正确的是()。
单选题
1、第150题 (1.0分) 题号:730 若以”a+”方式打开一个已存在的文件,则以下叙述正确的是()。
单选题
1、第149题 (1.0分) 题号:501 下列程序段的输出结果为()。 int a=7,b=9,t; t=a*=a>b?a:b; printf(”%d”,t);
单选题
1、第148题 (1.0分) 题号:573 C语言中运算对象必须是整型的运算符是()。
