c++ - sizeof() 运算符为数组和指向数组的指针返回不同的值

标签 c++ c arrays

下面是一个C程序:

#include<stdio.h>

void func(int a[])
{
  printf("%d\n",sizeof(a));
}

int main()
{
  int arr[10];
  printf("%d\n",sizeof(arr));
  func(arr);
  return 0;
}

现在的问题是,当我使用 sizeof(arr) 时,sizeof() 运算符返回 40,但 8 strong> 当我使用 sizeof(a) 时。
这种行为的原因是什么?

最佳答案

简单,但令人困惑:int a[]int a[42] 等函数参数调整 int* afunc(int a[]) 调整为

void func(int* a)

在这里,a实际上只不过是一个指针。所以 sizeof(a)sizeof(int*)

最重要的是,在许多情况下,数组会衰减为指针,例如当您将 arr 传递给 func 时。这使得这种情况发生

func(arr);

即使func的参数是一个指针。

关于c++ - sizeof() 运算符为数组和指向数组的指针返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29148638/

相关文章:

arrays - 如何从 Array 创建一个方法来生成一个元组 - Swift

c++ - 忽略调用 openssl EVP_cleanup 会导致严重缺陷或内存泄漏吗?

C++临时对象成员函数生命周期

c++ - 是否有理由在跨平台代码中使用 C++11 的 std::int_fast32_t 或 std::int_fast16_t 而不是 int ?

arrays - 什么是循环排序数组?

c++ - 在函数中使用数组 - C

c++ - 交叉编译 gcc

c - 逐个字符地打印一个字符串,在每个字符后延迟

C 我无法正确读取二进制文件

python - 在 Travis CI 上卡住 Python 应用程序