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++的: P.S:若數組為存儲 字符串的字符數組,則所求得的長度還需要減一,即對於宏定義: #define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]) - 1 );} ,對於函數定義: template <class T> int getArrayLen(T& array) { return (sizeof(array) / sizeof(array[0]) - 1); } 原因為存儲字符串的字 符數組末尾有一個'\0'字符,需要去掉它。 【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; } 【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; }
|