You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 17:17:04