gpt4 book ai didi

c++ - 为什么将数组视为函数参数 C++ 中的指针?

转载 作者:行者123 更新时间:2023-12-02 10:03:58 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why sizeof(param_array) is the size of pointer?

(8 个回答)



What is array to pointer decay?

(11 个回答)


2年前关闭。




为什么数组被视为 C++ 中函数的函数参数中的指针。在这里,我有一些代码片段来说明我的担忧:

#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
void test(uint32_t x[3])
{
cout << "Inside test : "<< sizeof(x) << endl;
}
int main()
{
uint32_t n[3];
cout << "Size of array in bytes : " << sizeof(n) << endl;
test(n);
return 0;
}

这是我得到的输出:
Size of array in bytes : 12
Inside test : 4

在第一种情况下,我得到了数组的实际大小,但是当 test()称为输出为 4 个字节,与 sizeof(uint32_t *) 相同.

这种行为的原因是什么?

每一个帮助表示赞赏!

最佳答案

这是 C99 标准 6.3.2.1/3 其他操作数 - 左值、数组和函数指示符。

Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object and is not an lvalue.



这是 C++ 标准。数组到指针的转换。

An lvalue or rvalue of type “array of N T” or “array of unknown bound of T” can be converted to an rvalue of type “pointer to T.”



在 C++ 中将数组作为指针传递不是强制性的,它可以作为引用粘贴。
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
void test(uint32_t (&x)[3])
{
cout << "Inside test : "<< sizeof(x) << endl;
}
int main()
{
uint32_t n[3];
cout << "Size of array in bytes : " << sizeof(n) << endl;
test(n);
return 0;
}

输出
Size of array in bytes : 12
Inside test : 12

关于c++ - 为什么将数组视为函数参数 C++ 中的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61166357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com