首页 > 解决方案 > 在函数中分配指向数组的指针

问题描述

所以我看到了这段代码,我得到了大部分代码,直到它应该分配一个指向数组的指针。目标是分配是必须编程打印出 100 99 98 3 2 1。所以在我看来,函数 f 什么都不做,所以我删除了它。我的问题是如何将指针分配给函数内的数组?我还认为返回数组会起作用,但没有成功。提前致谢

#include <iostream>
using namespace std;

int* nochange(int* p)
{
    return p;
}

int* getPtrToArray(int& m)
{
    int anArray[100];
    for (int j = 0; j < 100; j++)
        anArray[j] = 100-j;
    m = 100;
    return nochange(anArray);
}

void f()
{
    int junk[100];
    for (int k = 0; k < 100; k++)
        junk[k] = 123400000 + k;
    junk[50]++;
}

int main()
{
    int n;
    int* ptr = getPtrToArray(n);
    f();
    for (int i = 0; i < 3; i++)
        cout << ptr[i] << ' ';
    for (int i = n-3; i < n; i++)
        cout << ptr[i] << ' ';
    cout << endl;
}c

标签: c++arraysfunctionpointers

解决方案


您可以像这样从函数返回指针:

int* getPtrToArray(int& m)
{
    int *anArray = new int[100];
    for(int j = 0; j < 100; j++)
        anArray[j] = 100 - j;
    m = 100;
    return anArray;
}

int main()
{
    int n = 0;
    int* ptr = getPtrToArray(n);

    for(int i = 0; i < 3; i++)
        cout << ptr[i] << ' ';
    for(int i = n - 3; i < n; i++)
        cout << ptr[i] << ' ';
    cout << endl;

    delete []ptr; // you should free memory here
}    

但这是一种糟糕的风格:在一个地方分配内存,在另一个地方释放。

更好地将指向数组的指针传递到函数中,如下所示:

void fillArray(int *arr, int m)
{
    for(int j = 0; j < m; j++)
        arr[j] = m - j;
}

int main()
{
    const int M=100;
    int arr[M] = {0};
    fillArray(arr, M);
    //...
}

更现代的方法涉及使用向量:

#include <vector>

vector<int> getArray()
{
    vector<int> arr(100);
    for(int j = 0; j < 100; j++)
        arr[j] = 100 - j;
    return arr;
}

int main()
{
    auto arr = getArray();
    size_t n = arr.size();
    // ...    
    for(int i = n - 3; i < n; i++)
        cout << arr[i] << ' ';
}    

推荐阅读