C语言中能否比较两个指针的大小?附示例代码
C语言中指针变量的比较规则
首先明确:不是任意两个指针都能合法比较大小。
根据C语言标准,只有满足以下情况之一时,指针的大小比较(<、>、<=、>=)才是有定义的、行为可预期的:
- 两个指针指向同一数组的元素(包括指向数组末尾之后的“哨兵”指针);
- 两个指针指向同一结构体的成员;
- 两个指针指向同一个复合对象的不同部分。
回到你给出的示例代码:pointerAge指向独立局部变量age,pointerAllowed指向另一个独立局部变量allowedAge,这两个变量不属于同一数组、结构体或复合对象,因此它们的指针比较属于未定义行为。程序可能在某次运行中输出看似合理的结果,但本质上完全不可靠——不同编译器、不同运行环境下,指针地址的相对大小可能随机变化,甚至可能触发程序异常。
另外,你的代码逻辑存在明显错误:你实际想比较的是输入的年龄和允许饮酒的年龄数值,但代码里错误地比较了两个指针的内存地址,这完全偏离了需求。正确的做法是比较指针指向的变量值,也就是用*pointerAge和*pointerAllowed(或直接用allowedAge)进行比较。
修正后的代码如下:
#include <stdio.h> int main() { int age; int allowedAge = 18; int* pointerAge = &age; int* pointerAllowed = &allowedAge; printf("How old are you?\n"); scanf("%d", pointerAge); if(*pointerAge < *pointerAllowed) printf("You are only %d so you cannot drink any alcohol\n", *pointerAge); else printf("You are %d so you can drink\n", *pointerAge); return 0; }
内容的提问来源于stack exchange,提问作者Karlz-Bandz
相关产品推荐
相关产品推荐

