Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(197评价)
价格: 4431.00元
想问一道C++的题
淫魔灭世发起了问答04-30
1
回复
193
浏览
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吗

所有回复
  • 老师_Trigger 05-06

    在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
    }
    ```

    这样你就可以在函数中获取数组的实际大小了。

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!