美文网首页
C/C++中如何获取数组和指针的长度

C/C++中如何获取数组和指针的长度

作者: BrokenRainK | 来源:发表于2019-05-31 18:07 被阅读0次

    获取数组长度

    • 算术表达式
    #include <iostream>
    using namespace std;
    
    int main()
    {
        int arr[15];
        cout << "sizeof(arr) / sizeof(*arr):" << sizeof(arr) / sizeof(*arr) << endl;    //输出15
        cout << "sizeof(arr) / sizeof(arr[0]):" << sizeof(arr) / sizeof(arr[0]) << endl;//输出15
    
        return 0;
    }
    
    • 函数模板参数自动推断
    #include <iostream>
    using namespace std;
    
    template<class T, size_t N>
    size_t getCount(T (&arr)[N])
    {
        return N;
    }
    
    int main()
    {
        int arr[15];
        cout << "getCount(arr):" << getCount(arr) << endl;//输出15
    
        return 0;
    }
    
    • 标准C++模板库
    #include <iostream>
    #include <type_traits>  // 需包含此头文件
    using namespace std;
    
    int main()
    {
        int arr[15];
        cout << "extent<decltype(arr), 0>::value:" << extent<decltype(arr), 0>::value << endl;//输出15
    
        return 0;
    }
    
    • 模板特化与自动类型推断
    include <iostream>
    using namespace std;
    
    template <typename T>
    class ComputeSize;
     
    template <typename T, size_t N>
    class ComputeSize<T[N]>
    {
    public: 
        static const size_t value = N;
    };
     
    int main()
    { 
        int arr[15]; 
        cout << "ComputeSize<decltype( arr )>::value:" << ComputeSize<decltype( arr )>::value << endl; // 输出15
    
        return 0;
    }
    
    • Visual C++编译器预定义宏
    include <iostream>
    #include <stdlib.h>
    using namespace std;
     
    int main()
    { 
        int arr[15]; 
        cout << "_countof(arr):" << _countof(arr) << endl; // 输出15
    
        return 0;
    }
    
    
    • boost库
    #include <iostream>
    #include "boost/range.hpp"
    using namespace std;
     
    int main()
    {   
        int arr[15];   
        cout << "boost::size(arr):" << boost::size(arr) << endl; // 输出15
    
        return 0;
    }
    

    获取指针长度

    • windows平台
    include <iostream>
    using namespace std;
     
    int main()
    { 
        int *arr = new int[15]; 
        cout << "_msize(arr):" << _msize(arr) / sizeof(*arr) << endl; // 输出15
        delete arr;
    
        return 0;
    }
    
    • linux平台
    include <iostream>
    using namespace std;
     
    int main()
    { 
        int *arr = new int[15]; 
        cout << "malloc_usable_size(arr):" << malloc_usable_size(arr) / sizeof(*arr) << endl; // 输出15
        delete arr;
    
        return 0;
    }
    

    本文参考链接: https://blog.csdn.net/brucethl/article/details/79257360

    相关文章

      网友评论

          本文标题:C/C++中如何获取数组和指针的长度

          本文链接:https://www.haomeiwen.com/subject/eyigtctx.html