如何仅用单个指针比较三个字符串?求单指针实现的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
相关产品推荐
相关产品推荐

