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

 我来答
帐号已注销
2016-11-20 · TA获得超过3954个赞
知道大有可为答主
回答量:1636
采纳率:77%
帮助的人:1238万
展开全部

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/range.hpp"
#include <iostream>

int main(){   
    int arr[4];   
    std::cout << boost::size( arr ) << std::endl; // 输出4
}

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


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

http://webcompiler.cloudapp.net/

西西哩的小马甲
2018-03-31 · TA获得超过10.1万个赞
知道大有可为答主
回答量:39
采纳率:100%
帮助的人:1.8万
展开全部

方法:

使用sizeof(array) / sizeof(array[0]), 在C语言中习惯上,在使用时都把它定义成一个宏。

比如#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} 。而在C++中则可以使用模板技术定义一个函数。

比如:template <class T>intgetArrayLen(T& array){return (sizeof(array) / sizeof(array[0]));}

这样对于不同类型的数 组都可以使用这个宏或者这个函数来获取数组的长度了。

基础语法

1、C语言数据类型

C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。

2、常量与变量

常量其值不可改变,符号常量名通常用大写。 

变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shenhuan111
2016-11-20 · TA获得超过537个赞
知道小有建树答主
回答量:254
采纳率:50%
帮助的人:150万
展开全部
  1.  #include“string.h”

    strlen(a)求字符数组的大小是

  2. sizeof(a)/sizeof(a[0]);这种基本上万能

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-07-03
展开全部
就是sizeof(数组对象)就可以啊,我这里可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式