
这个是没法求的啊,条件不够。在代码里用了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++中如何获取数组的长度、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)