Nic*_*ing -2 c++ arrays sizeof parameter-passing
void myfunc(char* passedArray)
{
cout << sizeof(passedArray) << endl; // prints 4
}
int main(void)
{
char charArray[] = "abcdefghiklmop";
cout << sizeof(charArray) << endl; // prints 15
myfunc(charArray);
cout << sizeof(charArray) << endl; // prints 15
}
Run Code Online (Sandbox Code Playgroud)
我相信它应该仍然在该函数内打印15 ...
这是指针和数组的经典问题.正如您所看到的,问题是数组会衰减为指针.指针类型不包含有关它指向的数据的元数据,除了指向类型的大小.所有其他元数据(例如数组长度)都将丢失.
因此问题是你myfunc用一个指向数组的指针调用; 然后,该myfunc函数将看不到有关该数组的所有元数据.然后,这会触发sizeof运算符的细微差别,即当它应用于指针时,它会给出指针类型的大小,而不是数组的长度.但是,当应用于数组时,它会给出数组的长度,如main函数中所示.
简短修复,strlen改为使用.