如何在c++中从指针中检索数组

k5hmc34c  于 2023-02-06  发布在  其他
关注(0)|答案(2)|浏览(115)

我在使用一个只接受数组的程序时遇到了问题。我有很多指向不同数组的指针,但是使用 *p似乎只给予了我数组的第一个元素。我想返回数组的所有元素。如果有帮助的话,我知道数组的长度。

#include <typeinfo>

#include <iostream>

int i[10];
int* k=i;

cout<<typeid(i).name()<<'\n';

cout<<typeid(*k).name()<<'\n';

结果分别为“int [10]”和“int”。我希望以某种方式将k返回为“int [10]”。

kh212irz

kh212irz1#

你的k是一个指向int的指针。它指向数组的第一个元素。如果你想要一个指向整个数组的指针,那么你需要这样声明它。

#include <typeinfo>    
#include <iostream>
int main() {
    int i[10];
    int* k=i;
    int(*p)[10] = &i;

    std::cout<<typeid(i).name()<<'\n';
    std::cout<<typeid(*k).name()<<'\n';
    std::cout<<typeid(*p).name()<<'\n';
}

输出:

A10_i
i
A10_i

然而,正如其他人所说,std::array在使用时不那么容易混淆,它可以做(几乎)任何c数组可以做的事情,而没有它的怪癖。
当然,对于您的实际问题,有一种解决方案不需要从指向单个整数的指针获取数组。

cygmwpex

cygmwpex2#

下面的示例向您展示了C++数组/向量比带指针的“C”样式数组要方便得多:

#include <vector>
#include <iostream>

// with std::vector you can return arrays
// without having to think about pointers and/or new
// and your called cannot forget to call delete
std::vector<int> make_array()
{
    std::vector<int> values{ 1,2,3,4,5,6 };
    return values;
}

// pass by reference if you want to modify values in a function
void add_value(std::vector<int>& values, int value)
{
    values.push_back(value);
}

// pass by const refence if you only need to use the values
// and the array content should not be modified.
void print(const std::vector<int>& values)
{
    // use range based for loops if you can they will not go out of bounds.
    for (const int value : values)
    {
        std::cout << value << " ";
    }
}

int main()
{
    auto values = make_array();
    add_value(values, 1);
    print(values);
    std::cout << "\n";
    std::cout << values.size(); // and a vector keeps track of its own size.

    return 0;
}

相关问题