函数更改后指针的显示值与数组 C 一起改变

display value of pointer after function alter with array C

本文关键字:数组 一起 改变 显示 指针 函数      更新时间:2023-10-16

当我运行它时,它会给出一串数字和字母(我猜的地址)我哪里出错了?我试图显示最高和最低数字

intArray 是一个由 10 个数字组成的一维数组,大小 = 10

void greatAndSmall(int intsAray[], const int SZ, int greatAdd, int smallAdd)        //def func
{
    while (x < SZ)
    {
        if (intsAray[x] > greatAdd)
            greatAdd = intsAray[x];
        else
            break;
        if (intsAray[x] < smallAdd)
            smallAdd = intsAray[x];
        else
            break;
        x = x + 1;
    }
}
greatAndSmall(intArray, SIZE, &great, &small);      //IN MAIN FUNC
    cout << "The smallest of these numbers is: " << small << "n";  //display smallest
    cout << "The largest of these numbers is: " << great;       //display greatest

你的代码,如编写的那样,不是有效的 C/C++,无法编译。它还存在逻辑问题,即使编译也无法工作(您使用的break完全是多余的。

只需使用此代码:

void greatAndSmall (int intsArray [], int sz, int * largest, int * smallest)
{
    if (sz < 1) return;
    *largest = *smallest = intsArray[0];
    for (int i = 1; i < sz; ++i)
    {
        if (intsArray[i] > *largest) *largest = intsArray[i];
        if (intsArray[i] < *smallest) *smallest = intsArray[i];
    }
}

重要说明:这是 C 代码。不要一秒钟认为,仅仅因为你使用了cout,这可以算作C++代码。

只是为了比较,这就是人们在C++中写这篇文章的方式:

// Largest value in first and smallest value in second
std::pair<int, int> greatAndSmall (std::vector<int> const & c)
{
    if (c.empty()) return {};
    std::pair<int, int> ret (c[0], c[0]);
    for (unsigned i = 1; i < c.size(); ++i)
    {
        if (c[i] > ret.first) ret.first = c[i];
        if (c[i] < ret.second) ret.second = c[i];
    }
    return ret;
}

或者这个更通用(公认更复杂)的版本:

template<typename C>
auto greatAndSmall (C const & c)
    -> std::pair<typename C::value_type, typename C::value_type>
{
    if (c.empty()) return {};
    auto ret = std::make_pair(*c.begin(), *c.begin());
    for (auto const & v : c)
    {
        if (v > ret.first) ret.first = v;
        if (v < ret.second) ret.second = v;
    }
    return ret;
}