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)
还有其他问题吗?
谢谢
不,没有其他问题.您说的问题是阻止您初始化阵列的唯一问题.
通常,只需将大小与指针一起传递即可解决此问题:
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)