C C 獲取陣列的長度

2022-05-30 15:00:46 字數 1645 閱讀 7956

c、c++中沒有提供 直接獲取陣列長度的函式,對於存放字串的字元陣列提供了乙個strlen函式獲取長度,那麼對於其他型別的陣列如何獲取他們的長度呢?其中一種方法是使 用sizeof(array) / sizeof(array[0]), 在c語言中習慣上在 使用時都把它定義成乙個巨集,比如#define get_array_len(array,len)  。而在c++中則可以使用模板 技術定義乙個函式,比如:

template

int getarraylen(t& array)

return (sizeof(array) / sizeof(array[0]));

這樣對於不同型別的數 組都可以使用這個巨集或者這個函式來獲取陣列的長度了。以下是兩個demo程式,乙個c語言的,乙個c++的:

p.s:若陣列為儲存字串的字元陣列(char str2=;),則所求得的長度還需要減一,即對於巨集定義: #define get_array_len(array,len)  ,對於函式定義:

template

int getarraylen(t& array)

return (sizeof(array) / sizeof(array[0]) - 1);

原因為儲存字串的字 符陣列末尾有乙個'/0'字元,需要去掉它。

【c語言】

#include

#include

#define get_array_len(array,len)

//定義乙個帶引數的 巨集,將陣列長度儲存在變數len中

int main()

char a = ;

int len;

get_array_len(a,len)

//呼叫預定義的巨集,取得陣列a的長度,並將其儲存在變數len中

printf("%d/n",len);

system("pause");

return 0;

【c++】

#include

using namespace std;

template

int getarraylen(t& array)

;cout << getarraylen(a) << endl;

return 0;

}測試**:

#include#include

using

namespace

std;

template

int getarraylen(t&array)

intmain()

;//逐個字元賦給陣列中元素

char str2=;//

字串賦給陣列

int str1=;//

整型陣列

string str3=;//

字串陣列

string str4="

2324242

";//

字串

coutcout

cout

這個結果不對 基礎上-1

cout<"

"return0;

}

另: 在c++的函式裡面,如果把乙個陣列作為引數傳進去,那麼這個陣列就會退化為乙個指標,因而就不知道這個陣列的長度(這裡的陣列指的是靜態的而不是new出來的).

C C 陣列長度的獲取

在c 裡,字串長度可以用strlen 函式獲取,但是c 不支援陣列的長度直接獲取,所以我們要用陣列的大小來計算出它的長度 主要是根據程式執行時給定義的變數分配記憶體大小是固定的,我們用sizeof 獲取變數大小,比如 int型陣列就用陣列大小除以單個int變數的大小,這樣就能得到陣列的長度。c 中我...

C C 中如何獲取陣列的長度?

c c 中沒有提供 直接獲取陣列長度的函式,對於存放字串的字元陣列提供了乙個strlen函式獲取長度,那麼對於其他型別的陣列如何獲取他們的長度呢?其中一種方法是使 用sizeof array sizeof array 0 在c語言中習慣上在 使用時都把它定義成乙個巨集,比如 define get a...

C C 中如何獲取陣列的長度?

c c 中沒有提供 直接獲取陣列長度的函式,對於存放字串的字元陣列提供了乙個strlen函式獲取長度,那麼對於其他型別的陣列如何獲取他們的長度呢?其中一種方法是使 用sizeof array sizeof array 0 在c語言中習慣上在 使用時都把它定義成乙個巨集,比如 define get a...