這裡總結一下c/c++中檢視變數大小,陣列長度等的方法。本文**在windows 8.1下使用dev-c編寫,測試。
1
//標頭檔案
2
#include //c++
3
//或者
4
#include//c
5
//函式原型
6
extern
unsigned
int
strlen
(
char
*s)
strlen做的是乙個計數器的工作,函式傳入乙個char型別指標,從指標處開始掃瞄,直到碰到
字串結束符『\0』為止,返回計數器值(\0不計算在內)。
注意點:準確的說是c格式字串的注意點,注意最後是否有『\0』結束符。不然,可能造成記憶體越界。
stl中,容器的長度等,建議使用其自帶的成員函式檢視,size()通常是檢視使用大小的(不同的容器有不同實現)。
length()是string獨有的,檢視string中字串長度,後來為了統一介面,string也加入了size()。
內部實現原理和strlen相同,但是由於stl的封裝性,比c風格字串要安全。
length()和size()的實現是一樣的,所以,為了增加**重用性,建議使用size()。
通常而言,有empty(),意味著如果只是檢視容器是否為空,則建議使用empty()。但有人反對,依據是下面的**:
1
bool
empty()
const
2
顯然,這個寫法的話,二者的複雜度沒有區別。但是也有不同的實現,如下:
1
bool
2
empty()
const
3
這回就明白了,之所以建議使用empty()是因為不同的容器有不同的實現。有的容器empty()實現可能是o(1)的複雜度。所以,無論如何,使用empty()肯定不是壞事。
很多人可能被誤導,以為sizeof是函式,事實上sizeof是乙個操作符,不信的話可以去掉所有標頭檔案,看看sizeof可否通過編譯。
1
//sizeof(型別說明符,陣列名或表示式);
2
//或sizeof 變數名
3
sizeof
(object);
//sizeof(物件);
4
sizeof
(type_name);
//sizeof(型別);
5
sizeof
object;
//sizeof 物件;
注意:
線性表長度和陣列長度
陣列的長度是指存放線性表的儲存空間的長度,儲存分配後這個量一般是不變的。有個別同學可能會問,陣列的大小一定不可以變的嗎?我怎麼看到有書中談到可以動態分配的一維陣列。是的,一般高階語言,比如c,vb,c 都可以用程式設計手段實現動態記憶體分配陣列,不過著會帶來效能上的 損耗。線性表的長度是線性表中元素...
C C 陣列長度的獲取
在c 裡,字串長度可以用strlen 函式獲取,但是c 不支援陣列的長度直接獲取,所以我們要用陣列的大小來計算出它的長度 主要是根據程式執行時給定義的變數分配記憶體大小是固定的,我們用sizeof 獲取變數大小,比如 int型陣列就用陣列大小除以單個int變數的大小,這樣就能得到陣列的長度。c 中我...
C 使用變數作為陣列長度
部落格 c 中一般是不能使用變數作為乙個陣列的長度的,必須使用常量。這是因為陣列作為c 的內建資料型別,其空間分配在棧記憶體中,這部分空間的大小在編譯時就要確定,不能等到執行時再分配。常量的值在編譯時就能得到,而變數的值在執行時才能確定。但是仍然有辦法使用變數作為陣列的長度 繞過棧記憶體,將陣列空間...