Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ sizeof()运算符为数组和指向数组的指针返回不同的值_C++_C_Arrays - Fatal编程技术网

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

C++ sizeof()运算符为数组和指向数组的指针返回不同的值,c++,c,arrays,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; } #包括 void func(int a[] { printf(“%d\n”,sizeof(a)); } int main() { int-arr[10];

下面是一个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;
}
#包括
void func(int a[]
{
printf(“%d\n”,sizeof(a));
}
int main()
{
int-arr[10];
printf(“%d\n”,sizeof(arr));
func(arr);
返回0;
}
现在的问题是,当我使用sizeof(arr)时,sizeof()操作符返回40,但当我使用sizeof(a)时返回8
这种行为的原因是什么?

简单但容易混淆:函数参数如
int A[]
int A[42]
被调整为
int*A
<代码>函数(int a[])调整为

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

除此之外,数组在许多情况下都会衰减为指针,例如当您将
arr
传递到
func
时。这就允许这种情况发生

func(arr);

即使
func
的参数是指针。

您正在将“指针”的大小与数组的实际大小进行比较。

原因是这两个参数的大小不同。你应该解释一下为什么你希望结果是一样的。我希望两种情况下的结果都是40。如果我不把数组作为函数参数传递,并用一个本地指针指向它,那么问题也不会出现solved@ashishbhat指针的大小是指针的大小。没有什么能改变这一点。虽然我不确定“问题”是什么。数组名和指针之间有区别吗?@ashishbhat无法知道函数中数组的大小,如果需要,则需要向函数
func(int*a,size\t num\u of_元素){…}传递一个附加参数
@ashishbhat在许多情况下,数组名可能会衰减为指针。其中之一是将其作为参数传递给参数为指针的函数(如
func
),但数组和指针是不同的(从运行程序中可以看出)