c++ - 函数返回数组地址而不是它的值

标签 c++ pointers heap-memory

int* filtrationBiggerValues(int* values, int nrValues, int givenValue) {
    int j = 0;
    int *new_array=NULL;
    new_array = new int[nrValues];
    for (int i = 0; i < nrValues; i++)
        if (values[i] >= givenValue)
        {
            new_array[j] = values[i];
            j++;
        }
    return new_array;

}



void main() {
    int y[] = { 1,2,100,18,20,94 };
    cout<< filtrationBiggerValues(y, 6, 8)<<"\n";

}

我应该看到值大于特定值的新数组,但我却得到了它的地址。

最佳答案

这不是它的工作原理。您正在从函数返回一个指针而不是值。如果你想看到值作为输出,你应该迭代数组并分别打印出每个元素。另请注意从函数返回输出数组的大小以便于迭代。

int* filtrationBiggerValues(int* values, int nrValues, int givenValue, int& outputSize) {
    int j = 0;
    int *new_array=NULL;
    new_array = new int[nrValues];
    for (int i = 0; i < nrValues; i++)
        if (values[i] >= givenValue)
        {
            new_array[j] = values[i];
            j++;
        }
    outputSize = j;
    return new_array;

}

void main() 
{
    int y[] = { 1,2,100,18,20,94 };
    int outputSize = 0;

    int* output = filtrationBiggerValues(y, 6, 8, outputSize);
    for(int i=0; i<outputSize; ++i)
    {
        cout<< output[i] <<"\n";
    }
}

更新(如果你想保持函数的签名不变)

int* filtrationBiggerValues(int* values, int nrValues, int givenValue) {
    int j = 0;
    int *new_array=NULL;
    new_array = new int[nrValues];
    for (int i = 0; i < nrValues; i++)
        if (values[i] >= givenValue)
        {
            new_array[j] = values[i];
            j++;
        }
    new_array[j] = 0;
    return new_array;

}

void main() 
{
    int y[] = { 1,2,100,18,20,94 };

    int* output = filtrationBiggerValues(y, 6, 8);
    for(int i=0; output[i]>0; ++i)
    {
        cout<< output[i] <<"\n";
    }
}

关于c++ - 函数返回数组地址而不是它的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58680455/

相关文章:

c++ - 可以将成员变量(CBrush *)分配给在具有新原因问题的类构造函数中动态分配的内存吗?

c++ - 使用基于堆的数据调用将堆栈对象作为参数的函数

c++ - 为什么运行时堆栈对象的实例变量与堆对象不同?

c++ - Fstream 在 std::fstream::in | 中打开文件std::fstream::输出 | std::fstream::app 模式

c++ - 为什么 Xcode 无法识别 argc?

c++ - 在 C++ 中创建结构数组

c++ - boost::call_traits - 为什么 gcc 为此给出 false?

c - 动态内存分配的字符指针分析

C 设置下一个指针时循环链表中的段错误

java - Spring Boot Maven 项目的垃圾收集从不运行