gpt4 book ai didi

c++ - 为什么这个指针是8个字节?

转载 作者:行者123 更新时间:2023-12-05 08:29:27 25 4
gpt4 key购买 nike

我正在学习 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;
}

我试着输入一个包含三个元素的数组,比方说

int test_array[3] = {1, 2, 3};

有了这个输入,我期望这个函数打印 1,因为我认为 a 是一个整数指针(4 字节)并且 a[0] 也是为 4 个字节。然而,令我惊讶的是结果是 2 和 sizeof(a) = 8

我想不通为什么a占8个字节,而a[0]占4个,他们不应该一样吗?

最佳答案

Shouldn't they be the same?

没有。 a 是(本来是)一个数组(但因为它是一个函数参数,已被调整为指向第一个元素的指针),因此具有指针的大小。您的机器似乎有 64 位地址,因此每个地址(以及每个指针)都是 64 位(8 字节)长。

另一方面,

a[0] 是该数组元素所具有的类型(int),并且该类型具有 32 位( 4 字节)在你的机器上。

关于c++ - 为什么这个指针是8个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69997471/

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