为什么在main函数内统计的数组总大小40,但是在func1函数内统计的数组总大小是8呢?

问题描述:

根据下列代码和结果回答下列问题。

代码:

// Created by 黑马程序员.
#include "iostream"
using namespace std;

/*
 * void func(int arr[]);
 * void func(int arr[10]);
 * void func(int * arr);
 * 三者完全一致,无论哪种方式,arr均被看做指针(地址传递)
 *
 * - 函数体内,sizeof无法统计数组大小,得到的总是8字节(指针本身大小)
 * - 函数接受数组传入,一般建议附带数组长度(否则非常难以统计)
 */

void func1(int arr[10])
{
    cout << "在func1函数内统计的数组总大小:" << sizeof(arr) << endl;
}



int main()
{
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    cout << "在main函数内统计的数组总大小:" << sizeof(arr) << endl;

    func1(arr);
    return 0;
}

结果:

D:\CLion_code\cmake-build-debug\CLion_code.exe
在main函数内统计的数组总大小:40
在func1函数内统计的数组总大小:8

Process finished with exit code 0

为什么在main函数内统计的数组总大小40,但是在func1函数内统计的数组总大小是8呢?

问题解答:

 

main 函数内统计的数组总大小为 40,而在 func1 函数内统计的数组总大小为 8,这是因为在 C++ 中,数组在函数之间传递的方式和数组大小的计算方式不同。

1. main 函数内的数组大小计算

main 函数中,数组 arr 是一个真正的数组,sizeof(arr) 计算的是整个数组的大小。由于数组 arr 中有 10 个 int 元素,每个 int 占用 4 个字节,因此 sizeof(arr) 计算的结果是:

sizeof(arr)=10×4=40 字节\text{sizeof(arr)} = 10 \times 4 = 40 \text{ 字节}sizeof(arr)=10×4=40 字节

2. func1 函数内的数组大小计算

func1 函数中,形参 arr 的类型是 int arr[10],但在函数调用时,这个参数实际上是一个指向数组首元素的指针。在 C++ 中,当数组名作为参数传递给函数时,数组会退化为指针,传递的是数组第一个元素的地址。因此,sizeof(arr) 计算的是指针的大小。

在大多数 64 位系统中,指针的大小为 8 个字节,因此 sizeof(arr)func1 函数中返回的是 8。

总结

  • main 函数中,arr 是一个数组,sizeof(arr) 返回的是数组的总大小,即 40 个字节。
  • func1 函数中,arr 是一个指针,sizeof(arr) 返回的是指针的大小,即 8 个字节。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神笔馬良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值