单选题
1、第175题 (1.0分) 题号:190 关于指针概念说法不正确的是()。
A
一个指针变量只能指向同一类型变量
B
一个变量的地址称为该变量的指针
C
只有同一类型变量的地址才能放到指向该类型变量的指针变量之中
D
指针变量可以由整数赋,不能用浮点赋
答案解析
正确答案:D
解析:
**解析:**
本题考查指针的基本概念及赋值规则。我们需要逐一分析各个选项,找出说法**不正确**的一项。
* **A. 一个指针变量只能指向同一类型变量**
* **分析**:在强类型语言(如 C/C++)中指针声明时指定了基类型(例如 `int *p`),通常用于指向该类型的变量。虽然通过强制类型转换指针可以指向其他类型,或者使用 `void *` 通用指针,但在基础概念教学中,强调指针的类型安全性,即指针变量设计初衷是管理特定类型数据的地址。此说法在常规语境下被视为对指针类型约束的正确描述(或者说相比 D 选项,它的错误性不明显或属于特定语境下的规范说法)。*注:严格来说 A 也有争议,因为指针可以强制转换,但让我们先看其他选项。*
* **更正视角的深入分析**:其实 A 选项的说法也是不严谨的,因为指针可以通过强制类型转换指向不同类型。但是,让我们对比 D 选项。
* **B. 一个变量的地址称为该变量的指针**
* **分析**:这是指针的标准定义。在计算机内存中,每个字节都有一个编号,这个编号就是地址。我们通常把一个变量的地址称为该变量的“指针”。
* **结论**:说法正确。
* **C. 只有同一类型变量的地址才能放到指向该类型变量的指针变量之中**
* **分析**:这与 A 选项类似,强调类型匹配。在标准 C 语言中,将 `double` 类型的地址赋给 `int *` 指针会产生警告或错误,除非进行显式强制转换。因此,从类型安全和规范编程的角度看,这个说法旨在强调类型一致性,通常被认为是正确的概念描述。
* **结论**:说法基本正确(符合类型系统的基本规则)。
* **D. 指针变量可以由整数赋,不能用浮点赋**
* **分析**:
1. **关于整数赋值**:在标准的 C/C++ 中,**不能直接将一个整数赋值给指针变量**(除了常量 `0` 或 `NULL`)。例如 `int *p = 100;` 在现代编译器中通常会报错或至少发出严重警告,因为整数和指针是不同的类型。如果需要将特定地址赋给指针,必须进行强制类型转换,如 `int *p = (int *)100;`。因此,“指针变量可以由整数赋”这种笼统的说法是错误的。
2. **关于浮点赋值**:指针绝对不能用浮点数赋值,因为内存地址是离散的整数值,浮点数无法表示有效的内存地址。这部分后半句是对的。
3. **综合来看**:选项 D 的前半句“指针变量可以由整数赋”违背了类型安全原则(未经转换的直接赋值是非法的或不推荐的),而后半句“不能用浮点赋”是正确的。但作为一个整体陈述,它暗示了整数可以直接赋值而浮点不行,这在概念上是混淆的。更重要的是,在很多教材的语境中,会特别强调**指针不是整数**,虽然它们在底层都是数值,但不能混用。
* **重新审视题目意图**:
这道题是经典的计算机二级或初级编程考试题。这类题目往往考察的是最基础的“禁忌”。
* A 和 C 强调的是**类型匹配**,这是指针使用的核心规则,通常判为“正确”。
* B 是**定义**,判为“正确”。
* D 选项说“指针变量可以由整数赋”。这是一个非常典型的错误陷阱。虽然在某些老旧编译器或特定嵌入式开发中可能允许隐式转换,但在标准 C 语言理论中,**指针变量不能直接由整数赋值**(必须强转)。而且,即使允许强转,说“可以由整数赋”也容易误导初学者认为指针就是整数。相比之下,A、B、C 都是教材上的标准正面陈述。因此,D 是被选为“不正确”的最佳候选项,因为它描述了错误的操作方式(直接赋值)或者混淆了概念。
* **另一种常见的考点解释**:
有些教材认为,指针本质上是地址,地址是整数。但是,**语法上**不允许 `p = 10;` 这样的直接赋值(除 0 外)。如果题目意思是“指针变量的值本质上是一个整数地址”,那是对的。但题目说的是“可以由整数赋”,这指的是赋值操作。
实际上,这道题的题眼在于:**指针变量不能直接接受整数赋值(除了0/NULL),也不能接受浮点数赋值。** 选项 D 声称“可以由整数赋”,这是错误的。
**总结:**
* A、C 强调指针的类型约束,符合规范。
* B 是指针的定义,正确。
* D 错误地认为指针可以直接由整数赋值(实际上需要强制类型转换,且通常不建议这样做,除非操作硬件地址等特殊情况;且绝对不能由浮点数赋值)。因此 D 的说法是不正确的。
答案:**D**
题目纠错
c语言选择判断题库
相关题目
单选题
1、第84题 (1.0分) 题号:180 以下函数调用语句中实参的个数是()。 func((e1,e2),(e3,e4,e5));
单选题
1、第83题 (1.0分) 题号:123 执行下列程序后,其输出结果是()。
单选题
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 在调用函数时,如果实参是简单变量,它与对应形参之间的数据 传递方式是()。
