单选题
1、第177题 (1.0分) 题号:716 设有定义:int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是()。
A
p=1;
B
*q=2;
C
q=p;
D
*p=5;
答案解析
正确答案:D
解析:
**解析:**
首先分析题目中变量的定义和类型:
1. `int n = 0;`:定义了一个整型变量 `n`,初值为 0。
2. `int *p = &n;`:定义了一个指向整型的指针变量 `p`,并将其初始化为 `n` 的地址。此时 `p` 的类型是 `int *`,`*p` 等价于 `n`。
3. `int **q = &p;`:定义了一个指向指针的指针变量 `q`(二级指针),并将其初始化为 `p` 的地址。此时 `q` 的类型是 `int **`,`*q` 等价于 `p`,`**q` 等价于 `*p` 即 `n`。
接下来逐项分析选项:
* **A. `p=1;`**
* `p` 是一个指针变量(`int *`),它应该存储内存地址。虽然在一些编译器中整数可以强制转换为地址,但在标准 C 语言语境下,直接将整数常量 `1` 赋值给指针通常被视为非法或不安全的操作(除非显式强制转换,且 1 通常不是有效的可访问内存地址)。更重要的是,这与题目考察的指针解引用逻辑不符,通常被认为是错误的赋值方式。
* **B. `*q=2;`**
* `q` 是 `int **` 类型,`*q` 解引用一次后得到的是 `p`(类型为 `int *`)。
* 因此,`*q = 2;` 相当于 `p = 2;`。
* 同选项 A,将整数 `2` 直接赋值给指针变量 `p` 是不正确的,类型不匹配(`int *` vs `int`)。
* **C. `q=p;`**
* `q` 的类型是 `int **`(指向指针的指针)。
* `p` 的类型是 `int *`(指向整数的指针)。
* 两者类型不同,不能直接赋值。`q` 应该存放指针的地址(即 `int *` 类型的变量的地址),而 `p` 存放的是整数的地址。
* **D. `*p=5;`**
* `p` 指向 `n`(`p = &n`)。
* `*p` 表示对指针 `p` 进行解引用,访问其所指向的内存空间,也就是变量 `n`。
* 因此,`*p = 5;` 等价于 `n = 5;`。
* `n` 是 `int` 类型,`5` 是 `int` 类型,类型匹配,赋值合法且正确。
**结论:**
只有选项 D 是类型匹配且语义正确的赋值语句。
**正确答案:D**
题目纠错
c语言选择判断题库
相关题目
单选题
1、第82题 (1.0分) 题号:736 以下叙述中错误的是()。
单选题
1、第81题 (1.0分) 题号:592 能正确表示逻辑关系:”a≥10或a≤0”的C语言表达式是()。
单选题
1、第80题 (1.0分) 题号:732 若执行fopen函数时发生错误,则函数的返回值是()。
单选题
1、第79题 (1.0分) 题号:720 函数 rewind 的作用是()。
单选题
1、第78题 (1.0分) 题号:503 以下语句中,不能实现回车换行的是()。
单选题
1、第77题 (1.0分) 题号:541 若有int i=3,*p;p=&i;下列语句中输出结果为3的是()。
单选题
1、第76题 (1.0分) 题号:91 以下数值中,不正确的八进制数或十六进制数是()。
单选题
1、第75题 (1.0分) 题号:680 在调用函数时,如果实参是简单变量,它与对应形参之间的数据 传递方式是()。
单选题
1、第74题 (1.0分) 题号:116 下列语句的结果是()。
单选题
1、第73题 (1.0分) 题号:613 下面有关 for 循环的正确描述是()。
