首页 > 解决方案 > 坚持在 C 中比较 2 int** 的方法

问题描述

我被困在这种方法上,找不到我的错误。该方法的描述和我的代码如下:

此函数需要 2 个 int**。它比较被指向的整数,然后将指针设置为两个整数中较小的地址。如果值相等,则两个指针都应设置为第一个指针的地址。

传入的任何一个指针都可能指向 NULL 而不是一个有效的整数——在这种情况下,另一个值隐含地是最小的,并且两个指针都应该设置为指向非空值。您可以假设两个指针都不会为 NULL。

void point_to_smallest_ptr(int** first, int** second) 
{
    int* ptr1;
    int* ptr2;
    ptr1 = *first;
    ptr2 = *second;

    if(ptr1 == NULL)
    {
        ptr1 = ptr2;
    }
    else if(ptr2 == NULL)
    {
        ptr2 = ptr1;
    }

    else if(*ptr1 <= *ptr2)
    {
        ptr2 = ptr1;
    }

    else
    {
        ptr1 = ptr2;
    }
}

标签: c

解决方案


“这个函数需要 2 个 int**。” 它们是firstsecond,指向 的指针int

“所指向的整数”是**first**second

“... 然后将指针设置为 ...” 是*firstand *second,指向的指针int是指,显然不是firstand second,它们是指向目标指针的指针int。拥有指向目标指针的指针,而不仅仅是目标指针的副本,是允许您实际将目标指针修改为int.

“...两个整数中较小的一个的地址...”是您在指向 int 的指针之一中找到的值,即*firstor 或*second。要找出两者中的哪一个,您需要比较 ìnt s, i.e. something like (**first < **second)`。

“应该设置为第一个指针的地址”我认为令人困惑,我希望措辞“应该设置为第一个 int 的地址”或“应该设置为第一个指针中找到的地址诠释”。但是从上下文中可以很清楚地知道是什么意思。


推荐阅读