最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言數(shù)組長度的計(jì)算方法實(shí)例總結(jié)(sizeof與strlen)

 更新時(shí)間:2022年06月02日 15:05:14   作者:ImwaterP  
數(shù)組一旦創(chuàng)建,程序運(yùn)行期間,長度不可改變,下面這篇文章主要給大家介紹了關(guān)于C語言數(shù)組長度的計(jì)算方法,主要利用的是sizeof與strlen,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

最近在重新學(xué)習(xí)C語言,學(xué)習(xí)中發(fā)現(xiàn)之前對(duì)數(shù)組長度的計(jì)算方法模糊不清。因此做個(gè)總結(jié)。

首先要明白什么是數(shù)組。

數(shù)組是一組相同類型元素的集合。

因此,要定義一個(gè)數(shù)組,首先要確定數(shù)組內(nèi)的元素是同一種類型。

1. 數(shù)組的創(chuàng)建

首先來看看常用的數(shù)組的創(chuàng)建形式

  • int型
	int arr1 [10] = {0};//定義了元素個(gè)數(shù),且給第一個(gè)元素賦值為0,則其他元素均為0

通過VS調(diào)試中的監(jiān)視功能,可以看到各個(gè)數(shù)組的存放結(jié)果。

int arr2 [10] = {1, 2, 3, 4, 5};//定義了元素個(gè)數(shù),但只給前五個(gè)元素賦值,則后五個(gè)元素均為0

int arr3 [10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//定義了元素個(gè)數(shù),且給所有元素均賦值

int arr4 [10];//什么都不放,編譯器會(huì)給數(shù)組的每個(gè)元素放置隨機(jī)數(shù)。

int arr5[] = {1, 2, 3};//不定義元素個(gè)數(shù),給幾個(gè)元素賦值就有幾個(gè)元素。

注意:

如果你定義了數(shù)組的大?。ㄒ簿褪恰尽刻?hào)里面寫了數(shù)字),但是沒有給任何元素賦值,那么這個(gè)數(shù)組的所有元素都默認(rèn)為一個(gè)隨機(jī)數(shù)?。?!如果你定義了數(shù)組大小,但只給部分元素賦值,那么剩余元素的值默認(rèn)為0?。。。ㄒ娚厦鎍rr4和arr5)。

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

  • char型
	char arr6[] = "abc";//沒有定義元素個(gè)數(shù),用雙引號(hào)定義3個(gè)字符,末尾數(shù)組會(huì)自動(dòng)加上結(jié)束標(biāo)志(\0)

char arr7 [10] = "abc";//定義10個(gè)元素個(gè)數(shù),用雙引號(hào)賦值三個(gè)字符串,其余7個(gè)元素均自動(dòng)定義為\0

char arr8 [10] = {'a', 'b', 'c'};//定義10個(gè)元素個(gè)數(shù),用大括號(hào)和單引號(hào)賦值三個(gè)字符串,則數(shù)組只含有三個(gè)字符,剩余7個(gè)均為\0

char arr9 [10] = {'a', 98, '98'};//char定義數(shù)組,元素中出現(xiàn)沒有用單引號(hào)的數(shù)字,會(huì)根據(jù)ASCII碼輸出字符

	char arr10[] = {'a', 'b', 'c'};//沒有定義元素個(gè)數(shù),用大括號(hào)定義字符串,數(shù)組的元素個(gè)數(shù)則只有三個(gè),結(jié)尾沒有數(shù)組結(jié)束標(biāo)志(\0)

注意:

要格外注意舉例中arr10和arr6的不同。同樣為插入abc三個(gè)字符,但是arr6結(jié)尾有\(zhòng)0,arr10卻沒有,這在下一步求解數(shù)組長度的時(shí)候有相當(dāng)大的區(qū)別?。?!

2. 求解數(shù)組的長度

求解數(shù)組長度往往要用到兩個(gè)函數(shù),strlen或者sizeof

  • strlen求解數(shù)組長度

strlen是用來求一個(gè)字符串(string)的長度,因此strlen不能用來求int類型的數(shù)組長度,只能求char類型的數(shù)字長度。
具體代碼如下:

	char arr6[] = "abc";//沒有定義元素個(gè)數(shù),用雙引號(hào)定義3個(gè)字符,末尾數(shù)組會(huì)自動(dòng)加上結(jié)束標(biāo)志(\0)
	printf("length arr6 = %d\n", strlen(arr6));

	char arr7 [10] = "abc";//定義10個(gè)元素個(gè)數(shù),用雙引號(hào)賦值三個(gè)字符串,其余7個(gè)元素均自動(dòng)定義為\0
	printf("length arr7 = %d\n", strlen(arr7));

	char arr8 [10] = {'a', 'b', 'c'};//定義10個(gè)元素個(gè)數(shù),用大括號(hào)和單引號(hào)賦值三個(gè)字符串,則數(shù)組只含有三個(gè)字符,剩余7個(gè)均為\0
	printf("length arr8 = %d\n", strlen(arr8));

	char arr9 [10] = {'a', 98, '98'};//char定義數(shù)組,元素中出現(xiàn)沒有用單引號(hào)的數(shù)字,會(huì)根據(jù)ASCII碼輸出字符
	printf("length arr9 = %d\n", strlen(arr9));

	char arr10 [] = {'a', 'b', 'c'};//沒有定義元素個(gè)數(shù),用大括號(hào)定義字符串,數(shù)組的元素個(gè)數(shù)則只有三個(gè),結(jié)尾沒有數(shù)組結(jié)束標(biāo)志(\0)
	printf("length arr10 = %d\n", strlen(arr10));

注意:

1、從arr6和arr7中可以看出,用雙引號(hào)定義的字符串?dāng)?shù)組都能正確計(jì)算出數(shù)組長度。這是因?yàn)?strong>這兩個(gè)數(shù)組的****末尾都含有結(jié)束標(biāo)志”\0“(具體看前面舉例中的截圖)。

2、另外要注意的是,arr10輸入了三個(gè)字符,但結(jié)果卻是15個(gè),這是因?yàn)樵跊]有定義數(shù)組個(gè)數(shù)的時(shí)候,用大括號(hào)的形式賦值,結(jié)尾不會(huì)自動(dòng)補(bǔ)充結(jié)束標(biāo)志\0,導(dǎo)致這個(gè)結(jié)果是個(gè)隨機(jī)數(shù),strlen會(huì)在內(nèi)存中一直計(jì)數(shù),知道在內(nèi)存中遇到了0才會(huì)停止技術(shù)。
但是對(duì)比arr8和arr9,也是用了大括號(hào)賦值,但結(jié)果卻是正確的,這是因?yàn)殚_始定義了數(shù)組的個(gè)數(shù),沒有初始化賦值的數(shù)組會(huì)默認(rèn)賦值為0(與\0有一樣的效果)。

3、如果用strlen用來求int類型數(shù)組的長度,會(huì)發(fā)現(xiàn)strlen不能用了。

	int arr1 [10] = {0};//定義了元素個(gè)數(shù),且給第一個(gè)元素賦值為0,則其他元素均為0
	printf("length arr1 = %d\n", strlen(arr1));

	int arr2 [10] = {1, 2, 3, 4, 5};//定義了元素個(gè)數(shù),但只給前五個(gè)元素賦值,則后五個(gè)元素均為0
	printf("length arr2 = %d\n", strlen(arr2));

	int arr4 [10];//什么都不放,編譯器會(huì)給數(shù)組的每個(gè)元素放置隨機(jī)數(shù)。
	printf("length arr4 = %d\n", strlen(arr4));

  • sizeof求解數(shù)組長度

sizeof能計(jì)算變量或者數(shù)據(jù)類型所占用的內(nèi)存(以字節(jié)為單位)。用sizeof計(jì)算數(shù)組長度時(shí),sizeof不關(guān)心數(shù)組內(nèi)部存儲(chǔ)的是什么類型的數(shù)據(jù)。
所以常常用 sizeof(arr)/sizeof(arr[0]) 來計(jì)算數(shù)組的長度。其中“sizeof(arr)“計(jì)算了整個(gè)數(shù)組arr占據(jù)了多少內(nèi)存(字節(jié)為單位),”sizeof(arr[0])“計(jì)算了數(shù)組中第一個(gè)元素所占多少字節(jié),兩者相除就是數(shù)組的長度。

代碼如下:

	int arr1 [10] = {0};//定義了元素個(gè)數(shù),且給第一個(gè)元素賦值為0,則其他元素均為0

	int arr2 [10] = {1, 2, 3, 4, 5};//定義了元素個(gè)數(shù),但只給前五個(gè)元素賦值,則后五個(gè)元素均為0

	int arr3 [10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//定義了元素個(gè)數(shù),且給所有元素均賦值

	int arr4 [10];//什么都不放,編譯器會(huì)給數(shù)組的每個(gè)元素放置隨機(jī)數(shù)。
	
	int arr5[] = {1, 2, 3};//不定義元素個(gè)數(shù),給幾個(gè)元素賦值就有幾個(gè)元素。

	int len1 = sizeof(arr1) / sizeof(arr1 [0]);
	int len2 = sizeof(arr2) / sizeof(arr2 [0]);
	int len3 = sizeof(arr3) / sizeof(arr3 [0]);
	int len4 = sizeof(arr4) / sizeof(arr4 [0]);
	int len5 = sizeof(arr5) / sizeof(arr5 [0]);

	printf("length arr1 = %d\n", len1);
	printf("length arr2 = %d\n", len2);
	printf("length arr3 = %d\n", len3);
	printf("length arr4 = %d\n", len4);
	printf("length arr5 = %d\n", len5);

可以看出,如果你一開始就定義了數(shù)組的大小,那么不管你插入多少個(gè)元素,求出來的結(jié)果永遠(yuǎn)是你定義的數(shù)組大小。

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

	char arr6 [] = "abc";//沒有定義元素個(gè)數(shù),用雙引號(hào)定義3個(gè)字符,末尾數(shù)組會(huì)自動(dòng)加上結(jié)束標(biāo)志(\0)

	char arr7 [10] = "abc";//定義10個(gè)元素個(gè)數(shù),用雙引號(hào)賦值三個(gè)字符串,其余7個(gè)元素均自動(dòng)定義為\0

	char arr8 [10] = {'a', 'b', 'c'};//定義10個(gè)元素個(gè)數(shù),用大括號(hào)和單引號(hào)賦值三個(gè)字符串,則數(shù)組只含有三個(gè)字符,剩余7個(gè)均為\0

	char arr10 [] = {'a', 'b', 'c'};//沒有定義元素個(gè)數(shù),用大括號(hào)定義字符串,數(shù)組的元素個(gè)數(shù)則只有三個(gè),結(jié)尾沒有數(shù)組結(jié)束標(biāo)志(\0)

	int len6 = sizeof(arr6) / sizeof(arr6 [0]);
	int len7 = sizeof(arr7) / sizeof(arr7 [0]);
	int len8 = sizeof(arr8) / sizeof(arr8 [0]);
	int len10 = sizeof(arr10) / sizeof(arr10 [0]);

	printf("length arr6 = %d\n", len6);
	printf("length arr7 = %d\n", len7);
	printf("length arr8 = %d\n", len8);
	printf("length arr10 = %d\n", len10);

注意:

從arr6可以看出,當(dāng)用sizeof求char類型數(shù)組的長度時(shí),如果你沒有定義數(shù)組長度,那么得出的結(jié)果會(huì)比實(shí)際大小大1。這是因?yàn)閟izeof吧數(shù)組結(jié)尾的\0也算了進(jìn)去。

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

從arr10可以看出,如果你輸入數(shù)組時(shí)用了大括號(hào)賦值,并且在結(jié)尾沒有手動(dòng)輸入\0,那么算出的結(jié)果就是實(shí)際賦值的個(gè)數(shù)。

總結(jié):

  1. 定義數(shù)組時(shí),要先明確數(shù)組的類型(int還是char或者其他類型)。
  2. sizeof不能用來計(jì)算已經(jīng)定義好長度的數(shù)組的數(shù)組長度(如int arr[10] = {0},不能有中括號(hào)里的10)。
  3. strlen不能用來計(jì)算int類型的數(shù)組長度。
  4. int型計(jì)算數(shù)組長度,最好用 sizeof(arr) / sizeof(arr[0]) 來計(jì)算數(shù)組長度。
  5. char型數(shù)組如果要計(jì)算數(shù)組長度,一定要用雙引號(hào)賦值。
  6. char型數(shù)組如果要用大括號(hào)賦值,一定要注意數(shù)組最后是否需要結(jié)束標(biāo)志 \0

到此這篇關(guān)于C語言數(shù)組長度的計(jì)算方法的文章就介紹到這了,更多相關(guān)C語言數(shù)組長度計(jì)算方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于C++復(fù)制構(gòu)造函數(shù)的實(shí)現(xiàn)講解

    關(guān)于C++復(fù)制構(gòu)造函數(shù)的實(shí)現(xiàn)講解

    今天小編就為大家分享一篇關(guān)于關(guān)于C++復(fù)制構(gòu)造函數(shù)的實(shí)現(xiàn)講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 利用Matlab繪制好看的旋轉(zhuǎn)九邊形

    利用Matlab繪制好看的旋轉(zhuǎn)九邊形

    這篇文章主要為大家介紹了如何利用Matlab繪制超好看的旋轉(zhuǎn)九邊形。文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下
    2022-03-03
  • C++ 遍歷二叉樹實(shí)例詳解

    C++ 遍歷二叉樹實(shí)例詳解

    這篇文章主要介紹了C++ 遍歷二叉樹實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++使用easyx畫實(shí)時(shí)走動(dòng)的鐘表

    C++使用easyx畫實(shí)時(shí)走動(dòng)的鐘表

    這篇文章主要為大家詳細(xì)介紹了C++使用easyx畫實(shí)時(shí)走動(dòng)的鐘表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 一文詳解Qt中的對(duì)象樹機(jī)制

    一文詳解Qt中的對(duì)象樹機(jī)制

    Qt提供了對(duì)象樹機(jī)制,能夠自動(dòng)、有效的組織和管理繼承自QObject的Qt對(duì)象。這篇文章將通過一些示例為大家介紹一下Qt中對(duì)象樹機(jī)制的使用,需要的可以參考一下
    2023-03-03
  • C語言經(jīng)典順序表真題演練講解

    C語言經(jīng)典順序表真題演練講解

    程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要?jiǎng)?chuàng)建這種元素組,用變量記錄它們,傳進(jìn)傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個(gè)數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲(chǔ)區(qū)里,元素間的順序關(guān)系由它們的存儲(chǔ)順序自然表示
    2022-04-04
  • C++中的pair使用詳解

    C++中的pair使用詳解

    pair是定義在<utility>中的生成特定類型的模板,它的作用是把一組數(shù)據(jù)合并為一體,實(shí)際上是一個(gè)擁有兩個(gè)成員變量的struct,這篇文章主要介紹了c++的pair使用,需要的朋友可以參考下
    2022-09-09
  • C語言循環(huán)鏈表的原理與使用操作

    C語言循環(huán)鏈表的原理與使用操作

    無論是靜態(tài)鏈表還是動(dòng)態(tài)鏈表,有時(shí)在解決具體問題時(shí),需要我們對(duì)其結(jié)構(gòu)進(jìn)行稍微地調(diào)整。比如,可以把鏈表的兩頭連接,使其成為了一個(gè)環(huán)狀鏈表,通常稱為循環(huán)鏈表
    2022-05-05
  • C++之類和對(duì)象課后習(xí)題簡單實(shí)例

    C++之類和對(duì)象課后習(xí)題簡單實(shí)例

    下面小編就為大家?guī)硪黄狢++之類和對(duì)象課后習(xí)題簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • C++代碼實(shí)現(xiàn)貪吃蛇小游戲

    C++代碼實(shí)現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細(xì)介紹了C++貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評(píng)論

罗平县| 刚察县| 崇阳县| 高要市| 行唐县| 东乌| 玉树县| 临安市| 武邑县| 永德县| 长阳| 子长县| 印江| 上虞市| 额敏县| 禹州市| 穆棱市| 马尔康县| 炎陵县| 清流县| 马公市| 靖江市| 江川县| 藁城市| 萍乡市| 理塘县| 澎湖县| 长海县| 淳安县| 宁阳县| 高陵县| 大庆市| 开化县| 铜山县| 岱山县| 灌云县| 南靖县| 武夷山市| 大余县| 漳平市| 仪征市|