APM*_*500 3 c++ arrays pointers function
我正在学习 C++,并读到当数组传递给函数时它会衰减为指针。我想尝试一下并编写了以下函数:
void size_print(int a[]){
cout << sizeof(a)/sizeof(a[0]) << endl;
cout << "a ->: " << sizeof(a) << endl;
cout << "a[0] ->" << sizeof(a[0]) << endl;
}
Run Code Online (Sandbox Code Playgroud)
我尝试输入一个包含三个元素的数组,比方说
int test_array[3] = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
有了这个输入,我期望这个函数打印 1,因为我认为这a将是一个整数指针(4 个字节)并且a[0]也将是 4 个字节。然而,令我惊讶的是结果是 2 和sizeof(a) = 8。
我不明白为什么a占用8个字节,却a[0]占用4个字节。它们不应该是一样的吗?
Mar*_*ler 10
它们不应该是一样的吗?
No.a是(本来应该是)一个数组(但因为它是一个函数参数,已被调整为指向第一个元素的指针),因此具有指针的大小。您的机器似乎有 64 位地址,因此,每个地址(以及每个指针)都是 64 位(8 字节)长。
a[0]另一方面, 是该数组的元素所具有的类型 (an int),并且该类型在您的计算机上有 32 位(4 字节)。
| 归档时间: |
|
| 查看次数: |
4518 次 |
| 最近记录: |