C语言动态数组长度问题请教

C语言动态数组长度问题请教,第1张

这个是没法求的啊,条件不够。在代码里用了b这个变量为什么会不知道b的值?实在不行就printf()啊。这句代码是你自己写的还是在阅读别人的代码?如果是自己的代码应该不会不知道吧。如果是别人的代码,那恐怕就得从头到尾发上来,或自己推演一下了。如果把完全的代码发上来的话我可以帮忙看一下~

另外sizeof()当然不行。那是一个返回一个结构体或变量类型的字节数的,不是返回内存块大小的。

1 算术表达式:

#include <iostream>

int main() {

    int arr[4];

    std::cout << sizeof( arr ) / sizeof( arr[0] ) << std::endl; // 输出4

}

或者

#include <iostream>

int main() {

    int arr[4];

    std::cout << sizeof( arr ) / sizeof( arr ) << std::endl;  // 输出4

}

2 函数模板参数自动推断:

#include <iostream>

template <typename T, size_t N>

inline size_t Count(  T ( & arr )[N] ) {

    return N;

}

int main() {

    int arr[4];

    std::cout << Count( arr ) << std::endl;  // 输出4

}

3标准C++模板库:

#include <type_traits>  // 注意包含此头文件

#include <iostream>

int main() {

    int arr[4];

    std::cout << std::extent<decltype( arr ), 0>::value << std::endl; // 输出4

}

4模板特化与自动类型推断:

include <iostream>

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[4]; 

    std::cout << ComputeSize<decltype( arr )>::value << std::endl; // 输出4

}

5 Visual C++编译器预定义宏:

#include <cstdlib>

#include <iostream>

int main() {

    int arr[4];

    std::cout << _countof( arr ) << std::endl;  // 输出4

}

6 boost库:

#include "boost/rangehpp"

#include <iostream>

int main(){   

    int arr[4];   

    std::cout << boost::size( arr ) << std::endl; // 输出4

}

上面的方法适用于静态数组,动态的数组(new[])是无法获取元素个数的。

上面的代码,自己可以编译运行看看,如果手上没有编译器测试上面的代码或者编译失败,可以在下面的页面上编译运行(最新版本的Visual C++):

>

以上就是关于C语言动态数组长度问题请教全部的内容,包括:C语言动态数组长度问题请教、C/C++中如何获取数组的长度、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9520809.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存