分别写一个宏和一个函数来获取数组元素个数

本文介绍了一种在C++中统计数组元素数量的方法,并通过一个示例程序展示了如何使用宏定义和模板函数来实现这一功能。需要注意的是,该方法要求数组必须被初始化为全零。
#include <iostream>
using std::cout;
using std::endl;

#define CNT( a ) sizeof(a)/sizeof(*a)

template<typename T>
int fCNT( T* a )
{
	int nCnt = 0;
	T* p = a;
	while ( 0 != *p++ )
		nCnt++;
	return nCnt+1;
}

int main()
{
	//char a[] = "abcdef";
	char a[8] = {0};  // int char a[8] = {0};
	for ( int i = 0; i < 7; i++ )
		a[i] = 97+i;

	cout << "CNT(a): " << CNT(a) << endl;
	cout << "fCNT(a): " << fCNT(a) << endl;

	return 0;
}

    这种方法有个限制条件:数组需要初始化为0。

    至于针对于general 的数组,暂时没有想出更好的解决方法。

 

 


 

### C++ 中获取数组大小的方法 在 C++ 编程中,可以通过 `sizeof` 运算符来计算数组的总字节大小以及单个元素的字节大小,从而推导出数组中的元素数量。以下是具体方法: #### 使用 `sizeof` 计算数组长度 对于静态数组(即编译期已知大小的数组),可以直接利用 `sizeof` 来获取其大小。假设有一个整型数组 `arr`,则可以通过以下公式计算数组元素个数: ```cpp int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); ``` 上述代码片段中,`sizeof(arr)` 返回整个数组占用的内存空间(单位为字节),而 `sizeof(arr[0])` 则返回数组一个元素所占的内存空间[^1]。 #### 定义简化操作 为了方便多次调用并提高可读性,可以定义一个常量用于计算数组大小。例如: ```cpp #define Array_size(array) (sizeof(array) / sizeof((array)[0])) ``` 之后,在程序中只需简单调用该即可获得数组元素个数。下面是一个完整的例子: ```cpp #include <iostream> using namespace std; #define Array_size(array) (sizeof(array) / sizeof((array)[0])) int main() { int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; cout << "数组arr长度:" << Array_size(arr) << endl; cout << "数组arr内存大小:" << sizeof(arr) << " 字节" << endl; } ``` 需要注意的是,这种基于 `sizeof` 的方法仅适用于 **局部静态数组** 或者作为类成员变量声明的固定大小数组。如果将数组传递给函数,则会退化为指针形式,此时无法再使用此方法直接获取原始数组的大小[^2]。 #### 函数参数中的注意事项 当把数组作为参数传入到函数时,默认情况下它会被转换成指向首元素类型的指针。因此,单独依靠 `sizeof` 将不再能够反映原数组的实际尺寸。解决办法之一是在调用函数的同时额外提供数组维度的信息;或者采用更现代的方式——借助标准库容器如 `std::vector` `std::array` 替代传统裸数组结构,因为这些容器自带了查询容量的功能。 ```cpp void printArraySize(int* arrayPtr, size_t length){ cout << "The passed-in array has a known size of: " << length << "\n"; } // Usage example: printArraySize(arr, Array_size(arr)); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值