单选题
1、第163题 (1.0分) 题号:712 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是()。
A
p=q;
B
*p=*q;
C
n=*q;
D
p=n;
答案解析
正确答案:D
解析:
这是一道关于 C 语言指针基础知识的题目。我们需要分析变量定义以及每个选项中赋值语句的合法性。
**1. 变量定义分析**
```c
int n = 2; // 定义整型变量 n,初始值为 2
int *p = &n; // 定义整型指针 p,指向 n 的地址(即 p 存储的是 n 的地址)
int *q = p; // 定义整型指针 q,指向 p 所指向的地址(即 q 也存储的是 n 的地址)
```
此时:
- `n` 是 `int` 类型。
- `p` 和 `q` 都是 `int *` 类型(指向整型的指针)。
- `*p` 和 `*q` 代表指针所指向的值,即 `n` 的值,类型为 `int`。
**2. 选项逐一分析**
* **A. `p = q;`**
* **分析**:`p` 和 `q` 都是 `int *` 类型的指针变量。将指针 `q` 的值(地址)赋给指针 `p` 是完全合法的。这表示让 `p` 指向 `q` 当前指向的位置。
* **结论**:合法。
* **B. `*p = *q;`**
* **分析**:`*p` 和 `*q` 都解引用了指针,得到的是它们指向的内存中的整数值(即 `n` 的值)。这里是将 `int` 类型的值赋给 `int` 类型的变量(`n = n`)。
* **结论**:合法。
* **C. `n = *q;`**
* **分析**:`*q` 解引用后得到的是 `int` 类型的值。`n` 也是 `int` 类型的变量。将整数值赋给整型变量是标准的赋值操作。
* **结论**:合法。
* **D. `p = n;`**
* **分析**:
* `p` 是 `int *` 类型(指针),期望接收一个地址。
* `n` 是 `int` 类型(整数),值为 2。
* 在 C 语言中,不能直接将一个整型变量赋值给指针变量(除非进行强制类型转换,如 `p = (int *)n;`,但即便如此,将小整数直接赋给指针通常也是危险且不符合常规逻辑的,而在标准语法检查中,不同类型且无隐式转换规则的赋值被视为非法或至少会产生编译警告/错误)。编译器会报错或警告,提示类型不匹配(cannot convert 'int' to 'int *')。
* **结论**:**非法**。
**3. 最终结论**
选项 D 试图将一个整型变量直接赋值给指针变量,类型不匹配,因此是非法的赋值语句。
**答案:D**
题目纠错
c语言选择判断题库
相关题目
单选题
1、第96题 (1.0分) 题号:526 用户定义的函数不可以调用的函数是()。
单选题
1、第95题 (1.0分) 题号:532 结构体类型的定义允许嵌套是指()。
单选题
1、第94题 (1.0分) 题号:164 下列数组说明中,正确的是()。
单选题
1、第93题 (1.0分) 题号:597 下列四个选项中,均是C语言关键字的选项是()。
单选题
1、第92题 (1.0分) 题号:542 若有int *p=( )malloc( 则向内存申请到内存
单选题
1、第91题 (1.0分) 题号:491 下列程序段的输出结果为()。 float k=0.8567; printf(”%06.1d%%”,k*100);
单选题
1、第90题 (1.0分) 题号:703 若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是()。
单选题
1、第89题 (1.0分) 题号:665 以下正确的说法是:在C语言中()。
单选题
1、第88题 (1.0分) 题号:679 在C语言中,形参的缺省存储类是()。
单选题
1、第87题 (1.0分) 题号:675 关于建立函数的目的,以下正确的说法是()。
