2021-11-05

关于数组求长度的问题

这两天备赛复习的时候发现一个很有意思的东西,就是我们用什么办法去求一个数组的长度呢?先看这段代码:

# include <iostream>
using namespace std;

int ArryLength(int Arry[]){
    return sizeof(Arry)/sizeof(Arry[0]);
}

int main(void){
    int Arry[10]={1,2,3,4,5,6,7,8,9,10};
    cout<<ArryLength(Arry)<<endl;
    cout<<sizeof(Arry)/sizeof(Arry[0])<<endl;
    system("pause");
    return 0;
}

运行结果是2和10(编译器为vscode),毫无疑问后者是数组长度即元素个数,用

sizeof(Arry)/sizeof(Arry[0])

求得,但为什么定义一个返回值为int的ArryLength函数结果会大相径庭呢?原来函数调用和直接调用不同之处在于,函数调用相当于传递的是参数的引用,当数组作为参数时会自动退化为数组元素类型指针,像这个例子就会退化成一个int*,返回的也是一个int型指针(on array function parameter ‘Arry’ will return size of ‘int*’),那么函数返回值实际上是:

sizeof(int*)/sizeof(Arry[0])=8/4=2

且不同编译器可能取sizeof(int*)为4,这样结果就一直是1或2;而直接调用相当于是求出整个数组所占用的存储空间,再除以单个元素所占的存储空间得到长度:

sizeof(int)*Length/sizeof(Arry[0])=Length

关键在于要记住数组作为形参时返回一个类型指针。

上一篇:已知U=22V,f=50Hz,初相位30度,求交流电的四种表达方式


下一篇:关于冬季实战营第一期:从零到一上手玩转云服务器的学习感想