Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将子数组传递到函数_C++_Arrays - Fatal编程技术网

C++ 将子数组传递到函数

C++ 将子数组传递到函数,c++,arrays,C++,Arrays,我有一个需要传递数组的函数 但我不想传递整个数组(例如,从数组[0]到数组[size-1]的有效索引),而是传递子数组(例如,从数组[5]到数组[size-1]的有效索引) 是否有一种方法在C++中实现?< p>可以将数组转换到以下的函数参数 void Foo(int* arr, int length); //call Foo Foo(&a[0], length); //or Foo(a, length); 您还可以传输一定范围的数组 Foo(&a[1], length); F

我有一个需要传递数组的函数

但我不想传递整个数组(例如,从数组[0]到数组[size-1]的有效索引),而是传递子数组(例如,从数组[5]到数组[size-1]的有效索引)


是否有一种方法在C++中实现?

< p>可以将数组转换到

以下的函数参数
void Foo(int* arr, int length);
//call Foo
Foo(&a[0], length); //or
Foo(a, length);
您还可以传输一定范围的数组

Foo(&a[1], length);
Foo(a + 1, length);
只是,简单的代码

#include <iostream>
void Print(int* arr, int length)
{
    for(int i=0; i < length; i++)
    {
        std::cout << *(arr + i) << ", ";
    }

    std::cout << std::endl;
}

int main()
{
    int a[5] = {1,2,3,4,5};

    //type A
    Print(&a[0], sizeof(a)/sizeof(int)); //print all element of a
    Print(&a[1], 3); //print 2,3,4

    //type B
    Print(a, sizeof(a)/sizeof(int)); //print all element of a
    Print(a + 1, 3); //print 2,3,4

    getchar();
    return 0;
}
#包括
无效打印(整数*arr,整数长度)
{
for(int i=0;istd::cout您可以将数组转换为下面的函数参数

void Foo(int* arr, int length);
//call Foo
Foo(&a[0], length); //or
Foo(a, length);
您还可以传输一定范围的数组

Foo(&a[1], length);
Foo(a + 1, length);
只是,简单的代码

#include <iostream>
void Print(int* arr, int length)
{
    for(int i=0; i < length; i++)
    {
        std::cout << *(arr + i) << ", ";
    }

    std::cout << std::endl;
}

int main()
{
    int a[5] = {1,2,3,4,5};

    //type A
    Print(&a[0], sizeof(a)/sizeof(int)); //print all element of a
    Print(&a[1], 3); //print 2,3,4

    //type B
    Print(a, sizeof(a)/sizeof(int)); //print all element of a
    Print(a + 1, 3); //print 2,3,4

    getchar();
    return 0;
}
#包括
无效打印(整数*arr,整数长度)
{
for(int i=0;i

你不能把数组传递给函数。当你尝试的时候,你实际上会传递数组的第一个元素的地址。如果你需要一个从5开始的子数组,你只需传递第五个元素的地址。无论如何,你不应该使用C样式数组。使用STD::vector和迭代器,这是C++方式。 如图所示,可以向数组基指针添加偏移量(并相应地从传递的arraysize中减去)

或者将数组的
开始
结束
(结束后一个)指针传递给函数,以实现“迭代器风格”的实现

例如:

#include <iostream>

void foo(int arr[], int size) {
    for (int i = 0; i < size; i++)
        std::cout << arr[i] << ' ';
}

void bar(int* begin, int* end) {
    while (begin != end)
        std::cout << *begin++ << ' ';
}

int main() {
    int arr[] = {0,1,2,3,4,5,6,7,8,9};
    int size = sizeof(arr)/sizeof(*arr);

    // pass entire array
    foo(arr, size);
    //bar(arr, arr+size);
    std::cout << '\n';

    // pass array starting at index 5
    foo(arr+5, size-5);
    //bar(arr+5, arr+size);
    std::cout << '\n';
}


你不能把数组传递给函数。当你尝试的时候,你实际上会传递数组的第一个元素的地址。如果你需要一个从5开始的子数组,你只需传递第五个元素的地址。无论如何,你不应该使用C样式数组。使用STD::vector和迭代器,这是C++方式。 如图所示,可以向数组基指针添加偏移量(并相应地从传递的arraysize中减去)

或者将数组的
开始
结束
(结束后一个)指针传递给函数,以实现“迭代器风格”的实现

例如:

#include <iostream>

void foo(int arr[], int size) {
    for (int i = 0; i < size; i++)
        std::cout << arr[i] << ' ';
}

void bar(int* begin, int* end) {
    while (begin != end)
        std::cout << *begin++ << ' ';
}

int main() {
    int arr[] = {0,1,2,3,4,5,6,7,8,9};
    int size = sizeof(arr)/sizeof(*arr);

    // pass entire array
    foo(arr, size);
    //bar(arr, arr+size);
    std::cout << '\n';

    // pass array starting at index 5
    foo(arr+5, size-5);
    //bar(arr+5, arr+size);
    std::cout << '\n';
}

1、经典C++数组没有“子数组”概念。2,成本保持不变,数组通过指针传递,可以传递数组和两个索引。或者可以通过将指针传递到最后一个元素之后的指针和指针来使用迭代器概念。不能将数组传递给函数。如果你需要一个从5开始的子数组,你只需传递第五个元素的地址。无论如何,你不应该使用C样式数组。使用STD::vector和迭代器,这是C++的方式。1。经典C++数组没有“子数组”的概念。2。成本保持不变,数组通过指针传递,可以通过数组和两个索引。s、 或者,您可以使用迭代器概念,将指针传递到第一个元素和最后一个元素之后的指针。您不能将数组传递给函数。尝试传递时,实际上是传递数组第一个元素的地址。如果您需要从5开始的子数组,则只传递第五个元素的地址。您不应该使用C-sty无论如何,LE数组。使用STD::vector和迭代器,这是C++方式。