void test(char c1[128]) {
char c2[128];
void* p = malloc(256);
cout << sizeof(c1) << endl;//4
cout << sizeof(c2) << endl;//128
cout << sizeof(p) << endl;//4
}
这里的sizeof(c1)为什么是4啊,不应该是128吗
在C++中,当你传递一个数组作为参数时,它实际上被转换为一个指向数组首元素的指针。因此,当你在函数中使用 `sizeof(c1)` 时,你得到的是指针的大小,而不是数组的大小。
在函数签名中,`char c1[128]` 被解释为一个指向字符的指针,而不是一个包含128个字符的数组。所以 `sizeof(c1)` 返回的是指针的大小,通常是4个字节(在32位系统上)。
如果你想在函数中获取数组的大小,你可以传递数组的引用或者使用模板来解决这个问题。例如:
```cpp
template <size_t N>
void test(char (&c1)[N]) {
// 使用数组的大小 N
cout << sizeof(c1) << endl; // 128
}
```
或者使用标准库中的 `std::array`:
```cpp
#include <array>
void test(std::array<char, 128>& c1) {
// 使用数组的大小 128
cout << sizeof(c1) << endl; // 128
}
```
这样你就可以在函数中获取数组的实际大小了。