【问题标题】:sizeof on array returning different values [duplicate]数组上的sizeof返回不同的值[重复]
【发布时间】:2013-09-24 08:28:31
【问题描述】:

我有这个测试程序,它给出以下输出。

#include<iostream>
#include<cstdio>
void fun(char arr[])
{
printf(".size of char : %d\n.", sizeof(arr[0]));
printf(".size of char array: %d\n.", sizeof(arr));
}

main()
{
char arr[10]={'a','b','c','d','e'};
fun(arr);

printf("size of char array: %d\n", sizeof(arr));
}

输出

. 字符大小:1 ..char 数组的大小:8 .size 字符数组:10

现在我明白了,在第一个语句中它的数组成员的大小和在第三个语句中是整个数组的大小但是第二个 printf 中的 8 在这里说什么?

【问题讨论】:

    标签: c++ arrays


    【解决方案1】:

    传递数组名称衰减为指向其第一个元素的指针。所以sizeof 在你的主机系统上返回的指针大小是 8。

    【讨论】:

      【解决方案2】:

      当您将“数组”传递给函数时,实际上是在传递指向该数组的指针。换句话说,fun 中的表达式sizeof(array) 返回指针的大小。

      C 和 C++ 中的一个常见问题是,如果给定一个指向数组的指针,您能否找出数组的大小。不幸的是,你不能。

      【讨论】:

        【解决方案3】:

        您返回的是数组指针的大小,而不是数组。当您将数组传递给函数时,编译器会将指针的内存映射到数组并将其传递给函数。数组未通过。这将返回大小“8”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-16
          • 1970-01-01
          • 2012-05-29
          • 2012-05-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-20
          相关资源
          最近更新 更多