初始化由指针传递的数组

use*_*107 0 c++ arrays pointers initialization function

该函数无法初始化数组,因为sizeof()返回的字节数int pointer 不是内存所指向的大小myArray.

 void assignArray(int *myArray)
 {
     for(int k = 0; k < sizeof(myArray); ++k)
     {
         myArray[k] = k;
     }
 }
Run Code Online (Sandbox Code Playgroud)

还有其他问题吗?

谢谢

Pet*_*der 6

不,没有其他问题.您说的问题是阻止您初始化阵列的唯一问题.

通常,只需将大小与指针一起传递即可解决此问题:

void assignArray(int* myArray, std::size_t mySize)
{
    for (std::size_t k = 0; k < mySize; ++k)
        myArray[k] = k;
}
Run Code Online (Sandbox Code Playgroud)

请注意,我已经使用std::size_t了大小,因为这是存储大小的标准类型(它将是8位字节的64位计算机,而int通常不是).

在某些情况下,如果静态地知道大小,那么您可以使用模板:

template <std::size_t Size>
void assignArray(int (&myArray)[Size])
{
    for (std::size_t k = 0; k < Size; ++k)
        myArray[k] = k;
}
Run Code Online (Sandbox Code Playgroud)

但是,这仅适用于数组,而不适用于已分配数组的指针.

int array1[1000];
int* array2 = new int[1000];
assignArray(array1); // works
assignArray(array2); // error
Run Code Online (Sandbox Code Playgroud)