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

如何仅用单个指针比较三个字符串?求单指针实现的C三数最大值程序

用单个指针解决两个问题的方案

一、仅用单个指针实现读取3个数字并输出最大值的C程序

咱们先从你要的这个C程序说起,完全按照你给的原型来,全程只用int* p这一个指针变量,不需要任何额外变量。核心思路是借助动态内存分配存三个数字,通过指针偏移访问数据,再用覆盖比较的方式得到最大值:

#include<stdio.h>
#include<stdlib.h>
int main(void) { 
    int* p;
    // 分配能存储3个int的连续内存空间
    p = (int*)malloc(3 * sizeof(int));
    if (p == NULL) { // 处理内存分配失败的情况
        printf("内存分配失败\n");
        return 1;
    }
    // 读取三个数字,利用指针偏移访问三个内存位置
    scanf("%d %d %d", p, p+1, p+2);
    // 比较前两个数,把较大值覆盖到p指向的位置(无需额外变量)
    if (*(p+1) > *p) {
        *p = *(p+1);
    }
    // 再和第三个数比较,更新p指向的最大值
    if (*(p+2) > *p) {
        *p = *(p+2);
    }
    // 输出最终最大值
    printf("%d\n", *p);
    // 释放动态分配的内存,避免泄漏
    free(p);
    return 0;
}

关键细节说明:

  • 用malloc分配内存后,p指向数组首地址,p+1、p+2分别对应后续两个整数的存储位置,直接通过指针偏移就能读写三个数字。
  • 比较时直接把较大值覆盖到p指向的位置,全程没有用int max这类额外变量,完全符合你的要求。
  • 加了内存分配失败的判断,避免程序崩溃,最后一定要free释放内存哦。

二、仅用单个指针比较三个字符串

这里的“仅用单个指针”指的是只用一个指针变量跟踪当前找到的最大字符串,核心是通过更新指针指向来完成比较:

#include<stdio.h>
#include<string.h>

int main() {
    char str1[] = "orange", str2[] = "apple", str3[] = "banana";
    char *p = str1; // 初始让指针指向第一个字符串

    // 比较当前指针指向的字符串和第二个字符串
    if (strcmp(p, str2) < 0) {
        p = str2; // 如果第二个更大,指针转向第二个字符串
    }
    // 再用当前指针指向的字符串和第三个比较
    if (strcmp(p, str3) < 0) {
        p = str3; // 如果第三个更大,指针转向第三个字符串
    }

    printf("最大的字符串是:%s\n", p);
    return 0;
}

思路拓展:

如果你的三个字符串是存放在指针数组里的(比如char *strs[] = {"a", "c", "b"}),也可以用单个指向指针的指针遍历比较:

char *strs[] = {"a", "c", "b"};
char **p = strs;
if (strcmp(*p, *(p+1)) < 0) p++;
if (strcmp(*p, *(p+2)) < 0) p++;
printf("最大字符串:%s\n", *p);

这里的p也是单个指针变量,通过偏移访问指针数组元素,同样符合“仅用单个指针”的要求。

内容的提问来源于stack exchange,提问作者Johny21111

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:34:18