C/C++中获取数组长度的方法示例

学过C/C++的人都知道,在C/C++中并没有提供直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取其长度,那么对于其他类型的数组如何获取他们的长度呢?

其中一种方法是使用sizeof(array) / sizeof(array[0]), 在C语言中习惯上在使用时都把它定义成一个宏,比如:

#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));}

而在C++中则可以使用模板技术定义一个函数,比如:

template <class T>
int getArrayLen(T& array)
{
  return (sizeof(array) / sizeof(array[0]));
}

这样对于一些简单的数组可以使用这个宏或者这个函数来获取数组的长度了。
 
以下是两个Demo程序,一个C语言的,一个C++的:

注意:若数组为存储字符串的字符数组,即以双引号括起来的字符串整体初始化的字符数组

例如:

char a[]="abcdefg"

或者

char a[]={"abcdefg"}

则所求得的长度为字符数组的长度,而不是对应的字符串的长度,要求字符串的长度还需要减一。原因为存储字符串的字符数组末尾有一个'\0'字符,需要去掉它。

对于下例:

char a[]="abcdefg";
sizeof(a)/sizeof(a[0])=8;

要求字符串长度的话应该减1.

但对于:

char a[]={'a','b','c','d','e','f','g'};
sizeof(a)/sizeof(a[0])=7

C语言实例如下:

#include <stdio.h>
#include <stdlib.h>

#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));}
//定义一个带参数的宏,将数组长度存储在变量len中
int main()
{
 char a[] = {'1','2','3','4'};
 int len;

 GET_ARRAY_LEN(a,len)
//调用预定义的宏,取得数组a的长度,并将其存储在变量len中
 printf("%d\n",len);

 system("pause");
 return 0;
}

输出结果为:4
 
C++实例如下:

#include <iostream>
using namespace std;

template <class T>
int getArrayLen(T& array) //使用模板定义一个函数getArrayLen,该函数将返回数组array的长度
{
 return (sizeof(array) / sizeof(array[0]));
}
int main()
{
 char a[] = {'1','2','3'};
 cout << getArrayLen(a) << endl;

 return 0;
}

输出结果为:3

(0)

相关推荐

  • 图文详解c/c++中的多级指针与多维数组

    前言 首先先声明一些常识,如果你对这些常识还不理解,请先去弥补一下基础知识: 1.实际上并不存在多维数组,所谓的多维数组本质上是用一维数组模拟的. 2.数组名是一个常量(意味着不允许对其进行赋值操作),其代表数组首元素的首地址. 3.数组与指针的关系是因为数组下标操作符[],比如,int a[3][2]相当于*(*(a+3)+2) . 4.指针是一种变量,也具有类型,其占用内存空间大小和系统有关,一般32位系统下,sizeof(指针变量)=4. 5.指针可以进行加减算术运算,加减的基本单位是si

  • C/C++ 动态数组的创建的实例详解

    C/C++ 动态数组的创建的实例详解 在C++语言中,二维动态数组主要使用指针的方法建立,以建立一个整数二维数组为例: #include<iostream> #include<string> #include<malloc.h> using namespace std; int main(int argc,char **argv) { ///*int a[2][3]={{1,2,3},{4,5,6}}; //cout<<sizeof(a+1)<<

  • 浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号

    1 C,C++,Java,PHP都能容忍末尾的逗号 C,C++,Java中对数组赋值时,最后一个元素末尾的逗号可有可无.下面两行代码对这些语言来说是等效的. int a[] = {1,2,3}; /* 正确 */ int a[] = {1,2,3,}; /* 正确 */ PHP这一点也继承了C的特点,下面的两行代码等效. $a = array(1,2,3); /* 正确 */ $a = array(1,2,3,); /* 正确 */ 2 JavaScript视末尾逗号为语法错误! 然而到了Jav

  • Lua教程(五):C/C++操作Lua数组和字符串示例

    本文将介绍如何在C/C++里面操作Lua的数组和字符串类型,同时还会介绍如何在C/C++函数里面存储Lua状态(registry和upvalue),而registry在使用C/C++自定义类型时非常有用,可以方便地为userdata指定metatable. C/C++操作Lua数组 Lua数组Overview 在Lua里面,数组只不过是key为整数的table而已.比如一个table为array = {12,"Hello", "World"},它是一个数组,可以用下

  • C/C++ 数组和指针及引用的区别

    C/C++ 数组和指针及引用的区别 1.数组和指针的区别 (1)定义 数组是一个符号,不是变量,因而没有自己对应的存储空间.但是,指针是一个变量,里面存储的内容是另外一个变量的地址,因为是变量所以指针有自己的内存空间,只不过里面存储的内容比较特殊. (2)区别 a.对于声明和定义,指针和数组是不相同的,定义为数组,则声明也应该是数组,不可混淆 b.当作下标操作符时,指针和数组是等价的.a[i]会被编译器翻译成*(a+i). c.当数组声明被用作函数形参的时候,数组实际会被当作指针来使用. (3)

  • C/C++中获取数组长度的方法示例

    学过C/C++的人都知道,在C/C++中并没有提供直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取其长度,那么对于其他类型的数组如何获取他们的长度呢? 其中一种方法是使用sizeof(array) / sizeof(array[0]), 在C语言中习惯上在使用时都把它定义成一个宏,比如: #define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} 而在C++中则可以使用模板

  • php获取数组长度的方法(有实例)

    在php中获取数组长度方法很简单,php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度哦,下面我们来看几个实例吧.php如何获取数组的长度,使用php函数count(),或是sizeof()例如: 复制代码 代码如下: $arr = Array('0','1','2','3','4'); echo count($arr);// 输出 5$arr = array('A','B','C');echo sizeof($arr);//输出3 sizeof()和

  • AngularJS遍历获取数组元素的方法示例

    本文实例讲述了AngularJS遍历获取数组元素的方法.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>获取数组的元素例子</title> <script src="angular.min.js"></script> <s

  • Lua中获取table长度的方法

    官方文档是这么描述#的: 取长度操作符写作一元操作 #. 字符串的长度是它的字节数(就是以一个字符一个字节计算的字符串长度). table t 的长度被定义成一个整数下标 n . 它满足 t[n] 不是 nil 而 t[n+1] 为 nil: 此外,如果 t[1] 为 nil ,n 就可能是零. 对于常规的数组,里面从 1 到 n 放着一些非空的值的时候, 它的长度就精确的为 n,即最后一个值的下标. 如果数组有一个"空洞" (就是说,nil 值被夹在非空值之间), 那么 #t 可能是

  • PHP获取数组长度或某个值出现次数的方法

    本文实例讲述了PHP获取数组长度或某个值出现次数的方法.分享给大家供大家参考.具体分析如下: count():对数组中的元素个数进行统计; 例如: $arr = Array('0','1','2','3','4'); echo count($arr); // 输出 5 sizeof()和count()具有同样的用途,这两个函数都可以返回数组元素个数.可以得到一个常规标量变量中的元素个数,如果传递给这个函数的数组是一个空数组,或者是一个没有经过设定的变量,返回的数组元素个数就是0; array_c

  • java 数组越界判断和获取数组长度的实现方式

    目录 1. 背景介绍 2. 原始java代码 3. java代码对应的反编译字节码 4. jvm实现分析 4.1 获取数组长度arraylength指令核心代码分析 4.2 获取数组元素iaload指令分析 5. 小结一下 java 数组越界问题 1. 背景介绍 java中的数组比c语言中的数组,多了两个很重要的功能 当索引越界时, 会自动抛出ArrayIndexOutOfBoundsException, 避免一错再错 另一个很重要的方法是获取数组长度 这两个功能都不是通过java代码层面实现的

  • JavaScript 中有关数组对象的方法(详解)

    JS 处理数组多种方法 js 中的数据类型分为两大类:原始类型和对象类型. 原始类型包括:数值.字符串.布尔值.null.undefined 对象类型包括:对象即是属性的集合,当然这里又两个特殊的对象----函数(js中的一等对象).数组(键值的有序集合). 数组元素的添加 arrayObj.push([item1 [item2 [. . . [itemN ]]]]); 将一个或多个新元素添加到数组结尾,并返回数组新长度 arrayObj.unshift([item1 [item2 [. . .

  • PHP使用mysql_fetch_object从查询结果中获取对象集的方法

    本文实例讲述了PHP使用mysql_fetch_object从查询结果中获取对象集的方法.分享给大家供大家参考.具体分析如下: mysql_fetch_object函数用于,提取结果行从一个MySQL的结果集作为objectiative数组. mysql_fetch_object语法: array mysql_fetch_object (resource $Result_Set) Result_Set句柄返回一个mysql_query查询结果集. 如果执行成功返回包含了所有数据行的object,

  • Vue中遍历数组的新方法实例详解

    1.foreach foreach循环对不能使用return来停止循环 search(keyword){ var newList = [] this.urls.forEach(item =>{ if(item.name.indexOf(keyword) != -1){ newList.push(item) } }) return newList } 2.filter item对象就是遍历数组中的一个元素,includes是es6中的新方法,在search方法中直接返回新数组 search(key

  • golang 中获取字符串个数的方法

    在 golang 中不能直接用 len 函数来统计字符串长度,查看了下源码发现字符串是以 UTF-8 为格式存储的,说明 len 函数是取得包含 byte 的个数 // string is the set of all strings of 8-bit bytes, conventionally but not // necessarily representing UTF-8-encoded text. A string may be empty, but // not nil. Values

随机推荐