C語言數組長度的計算方法實例總結(sizeof與strlen)_第1頁
C語言數組長度的計算方法實例總結(sizeof與strlen)_第2頁
C語言數組長度的計算方法實例總結(sizeof與strlen)_第3頁
C語言數組長度的計算方法實例總結(sizeof與strlen)_第4頁
C語言數組長度的計算方法實例總結(sizeof與strlen)_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第C語言數組長度的計算方法實例總結(sizeof與strlen)目錄前言1.數組的創建2.求解數組的長度注意:總結:

前言

最近在重新學習C語言,學習中發現之前對數組長度的計算方法模糊不清。因此做個總結。

首先要明白什么是數組。

數組是一組相同類型元素的集合。

因此,要定義一個數組,首先要確定數組內的元素是同一種類型。

1.數組的創建

首先來看看常用的數組的創建形式

intarr1[10]={0};//定義了元素個數,且給第一個元素賦值為0,則其他元素均為0

通過VS調試中的監視功能,可以看到各個數組的存放結果。

intarr2[10]={1,2,3,4,5};//定義了元素個數,但只給前五個元素賦值,則后五個元素均為0

intarr3[10]={1,2,3,4,5,6,7,8,9,10};//定義了元素個數,且給所有元素均賦值

intarr4[10];//什么都不放,編譯器會給數組的每個元素放置隨機數。

intarr5[]={1,2,3};//不定義元素個數,給幾個元素賦值就有幾個元素。

注意:

如果你定義了數組的大小(也就是【】號里面寫了數字),但是沒有給任何元素賦值,那么這個數組的所有元素都默認為一個隨機數!!!如果你定義了數組大小,但只給部分元素賦值,那么剩余元素的值默認為0!!!(見上面arr4和arr5)。

因此常用上面arr1的方式,給int型數組的全部元素設置默認值為0.

char型

chararr6[]="abc";//沒有定義元素個數,用雙引號定義3個字符,末尾數組會自動加上結束標志(\0)

chararr7[10]="abc";//定義10個元素個數,用雙引號賦值三個字符串,其余7個元素均自動定義為\0

chararr8[10]={'a','b','c'};//定義10個元素個數,用大括號和單引號賦值三個字符串,則數組只含有三個字符,剩余7個均為\0

chararr9[10]={'a',98,'98'};//char定義數組,元素中出現沒有用單引號的數字,會根據ASCII碼輸出字符

chararr10[]={'a','b','c'};//沒有定義元素個數,用大括號定義字符串,數組的元素個數則只有三個,結尾沒有數組結束標志(\0)

注意:

要格外注意舉例中arr10和arr6的不同。同樣為插入abc三個字符,但是arr6結尾有\0,arr10卻沒有,這在下一步求解數組長度的時候有相當大的區別!!!

2.求解數組的長度

求解數組長度往往要用到兩個函數,strlen或者sizeof

strlen求解數組長度

strlen是用來求一個字符串(string)的長度,因此strlen不能用來求int類型的數組長度,只能求char類型的數字長度。

具體代碼如下:

chararr6[]="abc";//沒有定義元素個數,用雙引號定義3個字符,末尾數組會自動加上結束標志(\0)

printf("lengtharr6=%d\n",strlen(arr6));

chararr7[10]="abc";//定義10個元素個數,用雙引號賦值三個字符串,其余7個元素均自動定義為\0

printf("lengtharr7=%d\n",strlen(arr7));

chararr8[10]={'a','b','c'};//定義10個元素個數,用大括號和單引號賦值三個字符串,則數組只含有三個字符,剩余7個均為\0

printf("lengtharr8=%d\n",strlen(arr8));

chararr9[10]={'a',98,'98'};//char定義數組,元素中出現沒有用單引號的數字,會根據ASCII碼輸出字符

printf("lengtharr9=%d\n",strlen(arr9));

chararr10[]={'a','b','c'};//沒有定義元素個數,用大括號定義字符串,數組的元素個數則只有三個,結尾沒有數組結束標志(\0)

printf("lengtharr10=%d\n",strlen(arr10));

注意:

1、從arr6和arr7中可以看出,用雙引號定義的字符串數組都能正確計算出數組長度。這是因為這兩個數組的****末尾都含有結束標志\0(具體看前面舉例中的截圖)。

2、另外要注意的是,arr10輸入了三個字符,但結果卻是15個,這是因為在沒有定義數組個數的時候,用大括號的形式賦值,結尾不會自動補充結束標志\0,導致這個結果是個隨機數,strlen會在內存中一直計數,知道在內存中遇到了0才會停止技術。

但是對比arr8和arr9,也是用了大括號賦值,但結果卻是正確的,這是因為開始定義了數組的個數,沒有初始化賦值的數組會默認賦值為0(與\0有一樣的效果)。

3、如果用strlen用來求int類型數組的長度,會發現strlen不能用了。

intarr1[10]={0};//定義了元素個數,且給第一個元素賦值為0,則其他元素均為0

printf("lengtharr1=%d\n",strlen(arr1));

intarr2[10]={1,2,3,4,5};//定義了元素個數,但只給前五個元素賦值,則后五個元素均為0

printf("lengtharr2=%d\n",strlen(arr2));

intarr4[10];//什么都不放,編譯器會給數組的每個元素放置隨機數。

printf("lengtharr4=%d\n",strlen(arr4));

sizeof求解數組長度

sizeof能計算變量或者數據類型所占用的內存(以字節為單位)。用sizeof計算數組長度時,sizeof不關心數組內部存儲的是什么類型的數據。

所以常常用sizeof(arr)/sizeof(arr[0])來計算數組的長度。其中sizeof(arr)計算了整個數組arr占據了多少內存(字節為單位),sizeof(arr[0])計算了數組中第一個元素所占多少字節,兩者相除就是數組的長度。

代碼如下:

intarr1[10]={0};//定義了元素個數,且給第一個元素賦值為0,則其他元素均為0

intarr2[10]={1,2,3,4,5};//定義了元素個數,但只給前五個元素賦值,則后五個元素均為0

intarr3[10]={1,2,3,4,5,6,7,8,9,10};//定義了元素個數,且給所有元素均賦值

intarr4[10];//什么都不放,編譯器會給數組的每個元素放置隨機數。

intarr5[]={1,2,3};//不定義元素個數,給幾個元素賦值就有幾個元素。

intlen1=sizeof(arr1)/sizeof(arr1[0]);

intlen2=sizeof(arr2)/sizeof(arr2[0]);

intlen3=sizeof(arr3)/sizeof(arr3[0]);

intlen4=sizeof(arr4)/sizeof(arr4[0]);

intlen5=sizeof(arr5)/sizeof(arr5[0]);

printf("lengtharr1=%d\n",len1);

printf("lengtharr2=%d\n",len2);

printf("lengtharr3=%d\n",len3);

printf("lengtharr4=%d\n",len4);

printf("lengtharr5=%d\n",len5);

可以看出,如果你一開始就定義了數組的大小,那么不管你插入多少個元素,求出來的結果永遠是你定義的數組大小。

如果你沒有定義數組大小,那么算出來的就是你實際賦值的數組大小。

chararr6[]="abc";//沒有定義元素個數,用雙引號定義3個字符,末尾數組會自動加上結束標志(\0)

chararr7[10]="abc";//定義10個元素個數,用雙引號賦值三個字符串,其余7個元素均自動定義為\0

chararr8[10]={'a','b','c'};//定義10個元素個數,用大括號和單引號賦值三個字符串,則數組只含有三個字符,剩余7個均為\0

chararr10[]={'a','b','c'};//沒有定義元素個數,用大括號定義字符串,數組的元素個數則只有三個,結尾沒有數組結束標志(\0)

intlen6=sizeof(arr6)/sizeof(arr6[0]);

intlen7=sizeof(arr7)/sizeof(arr7[0]);

intlen8=sizeof(arr8)/sizeof(arr8[0]);

intlen10=sizeof(arr10)/sizeof(arr10[0]);

printf("lengtharr6=%d\n",len6);

printf("lengtharr7=%d\n",len7);

printf("lengtharr8=%d\n",len8);

printf("lengtharr10=%d\n",len10);

注意:

從arr6可以看出,當用sizeof求char類型數組的長度時,如果你沒有定義數組長度,那么得出的結果會比實際大小大1。這是因為sizeof吧數組結尾的\0也算了進去。

從arr7和arr8可以看出,如果定義了數組大小,跟int類型一樣,不管怎么定義,定義了多少,結果都是你定義的那個數組大小。

從arr10可以看出,如果你輸入數組時用了大括號賦值,并且在結尾沒有手動輸入\0,那么算出的結果就是實際賦值的個數。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論