c - 我如何仅使用一个指针来比较三个字符串而不使用其他
问题描述
我想用 C 语言编写一个程序,它可以读取 3 个数字并打印更大的数字,只使用一个指针而不使用更多变量。有人可以给我提供代码吗?我没能做到。我认为的唯一方法是使用这样的指针: *p[3] 但我知道这是否是我们被要求做的。我也想过使用 malloc 但我不知道如何
我们得到的原型是:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int*p;
...
}
解决方案
我想用 C 语言编写一个程序,它可以读取 3 个数字并打印更大的数字,只使用一个指针而不使用更多变量。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p;
p = malloc(sizeof *p); // assume it worked
if (scanf("%d", p) != 1) /* error */; // read 1st number
printf("%d\n", *p); // print 1st number
if (scanf("%d", p) != 1) /* error */; // read 2nd number
printf("%d\n", *p); // print 2nd number
if (scanf("%d", p) != 1) /* error */; // read 3rd number
printf("%d\n", *p); // print 3rd number
free(p);
}
上面的程序执行所需的操作。此外,它还打印中间和较小的数字!
使用 3 个指针数组更新
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p[3];
p[0] = malloc(sizeof *p[0]); // assume it worked
p[1] = malloc(sizeof *p[0]); // assume it worked
p[2] = malloc(sizeof *p[0]); // assume it worked
if (scanf("%d", p[0]) != 1) /* error */; // read 1st number
if (scanf("%d", p[1]) != 1) /* error */; // read 2nd number
if (scanf("%d", p[2]) != 1) /* error */; // read 3rd number
if ((*p[0] >= *p[1]) && (*p[0] >= *p[2])) printf("%d\n", *p[0]);
if ((*p[1] > *p[0]) && (*p[1] >= *p[2])) printf("%d\n", *p[1]);
if ((*p[2] > *p[0]) && (*p[2] > *p[1])) printf("%d\n", *p[2]);
free(p[2]);
free(p[1]);
free(p[0]);
}
推荐阅读
- c++ - 了解 std::pmr::new_delete_resource
- java - Windows 服务器的 Java sftp 文件传输
- xslt - 如何使用 XSL 1.0 在重复上下文中显示当前日期?
- sql - 如何从 2 个连接表中检索数据 - 帐户和别名?
- google-sheets - 当被比较的单元格是日期时,查询中的日期比较不匹配,但如果将单元格制成文本则有效
- java - 如何将 .nfo 文件转换为 .fff
- php - 带有 foreach 的 PHP 数组
- android - 预计 ble 设备可能不会宣传服务吗?
- ios - 如何使用委托更新表格视图单元格
- sql - SQL中的负二项式生成