简体   繁体   中英

C++ syntax pointer for array

In the following:

int c[10] = {1,2,3,4,5,6,7,8,9,0};

printArray(c, 10);

template< typename T >
void printArray(const T * const array, int count)
{
    for(int i=0; i< count; i++)
        cout << array[i] << " ";
}

I am a little confused why the function signature of the template function makes no reference to array being an array by using [], so something like const T * const[] array .

How could one tell from the template function signature that an array is being passed and not just a non-array variable??

You cannot tell for sure. You would have to read the documentation and/or figure it out from the names of the function parameters. But since you are dealing with fixed sized arrays, you could have coded it like this:

#include  <cstddef> // for std::size_t

template< typename T, std::size_t N >
void printArray(const T (&array)[N])
{
    for(std::size_t i=0; i< N; i++)
        cout << array[i] << " ";
}

int main()
{
  int c[] = {1,2,3,4,5,6,7,8,9,0}; // size is inferred from initializer list
  printArray(c);
}

An array has a size. To create a reference to an array, you need to provide the size statically. For example:

template <typename T, std::size_t Size>
void printArray(T const (&array)[Size]) {
    ...
}

This functions takes the array by reference and you can determine its size.

You could try something like the following:

template< std::size_t N>
struct ArrayType
{
    typedef int IntType[N];
};

ArrayType<10>::IntType content = {1,2,3,4,5,6,7,8,9,0};

template< std::size_t N >
void printArray(const typename ArrayType<N>::IntType & array)
{
    //for from 0 to N with an array
}
void printArray(const int * & array)
{
    //not an array
}

Raxvan.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM