尝试在函数内部和 main 内部使用指针算法查找数组长度时的不同结果

问题描述 投票:0回答:1

当我运行这段代码时出于某种奇怪的原因:

int func(int arr[],int n){
int a = *(&arr + 1) - arr;
    printf("%d",a);
}

我得到一个地址,

当我在 main 中运行相同的代码时,我得到了数组的长度。

知道为什么吗?

我在 main 中运行它,它给了我一个数组的长度,当我在一个函数中运行它时,它给了我一个地址。

arrays c pointers implicit-conversion
1个回答
2
投票

这个函数声明

int func(int arr[],int n){

由编译器调整为

int func(int *arr,int n){

另一方面。作为参数表达式传递给函数的数组被隐式转换为指向其类型 int *.

的第一个元素的指针

所以在函数中你实际上处理的是指针而不是数组。

© www.soinside.com 2019 - 2024. All rights reserved.