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++的:
PS:若数组为存储字符串的字符数组,即以双引号括起来的字符串整体初始化的字符数组
例如: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;
templatee <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
分享到:
相关推荐
在C/C++编程中,获取数组长度是...总的来说,C/C++中获取数组长度虽然没有直接的内置函数,但通过`sizeof`运算符配合宏或模板函数,我们可以轻松地获取到数组的元素个数。这些技巧在编写涉及数组操作的代码时非常有用。
由于 C/C++ 没有提供直接获取数组长度的函数,因此需要使用其他方法来实现。 1. 使用 `strlen` 函数获取字符串数组的长度 在 C/C++ 中,可以使用 `strlen` 函数来获取字符串数组的长度。例如: ```c char a[] = ...
C/C++实现多维不等宽多维动态数组 C/C++实现多维不等宽多维动态数组 C/C++实现多维不等宽多维动态数组 C/C++实现多维不等宽多维动态数组
- **答案**:当使用数组名作为函数参数时,C++只传递数组首地址而不检查数组边界,因此不需要指定数组长度。即使指定了长度,也不会起到实际作用。 **5.2.4 如何编写对多维数组通用的算法?** - **解决方案**:...
传统的C++数组在声明时需要指定其长度,而不定长数组允许我们在运行时根据需要分配和调整大小。这种特性使得程序更加灵活,能更好地适应变化的数据需求。 在C++中,实现不定长数组的方式主要有两种:使用`std::...
数组中重复的数字(C语言/C++) 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字...
### 林锐-高质量C/C++编程指南 #### 概述 《林锐-高质量C/C++编程指南》是一份由林锐博士编撰的专业文档,旨在为C/C++开发者提供一套规范化的编程指导原则。这份文档对于希望提升编程技能、编写出高质量代码的C++...
在C++中,静态二维数组需要在声明时指定大小,而动态二维数组则可以在运行时根据需要分配内存。在这个程序中,`float **A` 和 `float **b` 表示动态二维数组。`new` 运算符用于动态分配内存,例如 `*A = new float[N...
这个问题是关于C/C++语言中数组和指针的概念。这里有六个变量:str1、str2、str3、str4、str5、str6。其中str1、str2、str3、str4是数组,str5、str6是指针。问题是关于这六个变量的比较结果。 根据C/C++语言的规则...
在C/C++语言中,数组的下标范围是从0到n-1,其中n是数组的长度。当数组的下标超过了这个范围时,会导致数组越界问题。例如,在给定的代码中,数组A的下标范围是从0到MAX-1,当i循环到MAX时,A[255]=255;这句代码本身...
在 C++ 中,定义数组的语法为:`储存类型符 数据类型符 数组名 [ 数组长度 ][ 数组长度 ]`。例如,`static int a[3][4]` 定义了一个静态的整型二维数组 `a`,它有 3 行 4 列。 在 C++ 中,我们可以使用多种方式来...
试题1中,面试者被要求复制一个超过目标数组长度的字符串,这会导致缓冲区溢出,是C/C++编程中的常见错误。试题2中,面试者需注意到字符数组str1的初始化问题,以及strcpy()函数可能会遇到的不确定性。试题3中,面试...
《C/C++贪吃蛇游戏》是一款完全由开发者独立构思并实现的小游戏,它展示了C/C++编程语言在游戏开发中的应用。贪吃蛇游戏,作为一个经典的计算机游戏,其核心算法设计包括蛇的移动、碰撞检测、食物生成、分数计算等...
C99引入了许多新特性,比如支持变量长度数组(VLA)、新的数据类型(如复数和宽字符类型)、内联函数、可选的括号包围初始化器、以及对原生类型的支持。此外,C99还改进了预处理器,引入了类型安全的指针运算,增强...
在这个特定的C/C++实现中,我们聚焦于卷积码的解码过程。 卷积码是通信系统中常用的前向错误纠正(FEC)编码方法,它通过在原始数据上施加一系列线性运算来产生冗余位,从而提高信息传输的可靠性。Viterbi算法是...
在C++编程中,处理数组是一项基本操作,而数组之间的运算更是常见的任务之一。本问题主要探讨了如何在C++中实现两个一维数组的...通过实际编写和运行这样的代码,读者可以加深对C++数组操作的理解,并提高编程技能。
在C和C++编程语言中,处理二维数组时经常需要进行动态分配和释放内存。这是因为静态分配的数组大小在编译时就已经确定,而实际应用中往往需要根据运行时的具体情况进行灵活调整。本文将详细介绍在C/C++中动态分配和...
cjson是一个轻量级的C语言编写的JSON解析器和生成器,它提供了在C/C++项目中处理JSON的便捷方法。cjson库不仅支持解析JSON字符串到C数据结构,还支持将C数据结构转换为JSON字符串。 在C++中,解析JSON数组的步骤...