幻想的羽毛

sizeof获取数组长度
首先必须要分清楚两点,下面用整型数组来举例如果有int a[2]那么数组名a指的是数组a的第一个元素a[0]的地址...
扫描右侧二维码阅读全文
16
2018/09

sizeof获取数组长度

首先必须要分清楚两点,下面用整型数组来举例

如果有int a[2]

那么数组名a指的是数组a的第一个元素a[0]的地址
而对数组名应用地址运算符&a指的是数组a所有元素的地址

分清楚上面的区别之后,调用sizeof方法的结果也因此不一样

//假设这里整型占2字节
sizeof(a) //这将计算出数组所有元素所占内存的大小
sizeof(a[0])//这将计算出数组第一个元素所占内存的大小
sizeof(*a)//数组名本身也是指针,所以这也将计算出第一个元素的大小
sizeof(int)//这将计算出整型在当前计算机中所占内存的大小

//因此将上面的运算式结合则可计算出数组长度
int len = sizeof(a) / sizeof(int)

//但有一个重要的一点
//如果在函数中计算长度,如下面的例子
int getLen(int n[]){
    //形参n将从数组名退化成指向int类型的指针
    //即int *n
    //因此sizeof(n)计算出来的只是指针的内存大小
    //而不是数组的内存大小
    return sizeof(n) / sizeof(int);
    //所以这个函数不能实现计算长度的功能
}

因此解决方法可以是在声明函数的地方计算出数组的长度然后在函数参数中传递进去

void func(int n[], int len){
    //这里执行函数的功能
    return;
}

int main(){
    int a[2];
    int len;
    len = sizeof(a) / sizeof(int);
    func(a, len);
    return 0;
}

或者使用C++的STL模板类Vector来代替数组

Last modification:September 16th, 2018 at 05:21 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment