数组上返回不同值的大小
sizeof on array returning different values
我有这个测试程序,它给出了以下输出。
#include<iostream>
#include<cstdio>
void fun(char arr[])
{
printf(".size of char : %dn.", sizeof(arr[0]));
printf(".size of char array: %dn.", sizeof(arr));
}
main()
{
char arr[10]={'a','b','c','d','e'};
fun(arr);
printf("size of char array: %dn", sizeof(arr));
}
输出
字符大小 : 1..字符数组的大小:8字符数组的大小:10
现在我明白了在第一条语句中它是数组成员的大小,在第三条语句中是整个数组的大小,但是第二个 printf 中的 8 在这里说了什么?
传递数组的名称会衰减到指向其第一个元素的指针。因此sizeof
返回指针的大小,该大小在主机系统上为 8。
当你把一个"数组"传递给一个函数时,你实际上传递了一个指向数组的指针。换句话说,表达式sizeof(array)
in fun
返回指针的大小。
在 C 和 C++ 中,一个常见的问题是,在给定一个指向数组的指针的情况下,你是否可以找出数组的大小。不幸的是,你不能。
您返回的是数组指针的大小,而不是数组的大小。将数组传递给函数时,编译器会将指针的内存映射到数组并将其传递给函数。数组未传递。这将返回大小"8"。
相关文章:
- 从 C++ 中的函数返回数组地址问题
- 如何在 c++ 函数中返回数组
- 如何从 c++ 中的函数返回数组
- 为什么 c++ 函数可以正确返回数组的大小?
- 解释通过从函数引用返回数组的语法
- (C++)我的函数不返回数组
- 如何按 C++ 中的值从函数返回数组
- 返回数组中值的指针地址
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 使用数组类返回数组c++
- 如何使函数返回数组?用于制作在VB.NET中使用的DLL
- 从函数 BY VALUE 返回数组,返回结构时会发生什么?
- 调用和打印函数,在 C++ 中返回数组
- 如何使用递归函数返回数组中整数的索引?
- 从函数返回数组时是否需要删除
- 为什么从函数返回数组时需要将数组声明为静态数组.(C++)
- C++返回数组而不进行动态内存分配?
- 在函数 c++ 中返回数组时出现问题
- 如何从C 中的函数返回数组
- 如何使类函数返回数组,然后将其调用并存储在 main 中