首页 > 解决方案 > 我如何仅使用一个指针来比较三个字符串而不使用其他

问题描述

我想用 C 语言编写一个程序,它可以读取 3 个数字并打印更大的数字,只使用一个指针而不使用更多变量。有人可以给我提供代码吗?我没能做到。我认为的唯一方法是使用这样的指针: *p[3] 但我知道这是否是我们被要求做的。我也想过使用 malloc 但我不知道如何

我们得到的原型是:

#include<stdio.h>

#include<stdlib.h>

int main(void)

{

 int*p;
 ...

 }

标签: cpointersc-strings

解决方案


我想用 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]);
}

推荐阅读