亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言之sizeof與strlen的使用及區(qū)別

 更新時(shí)間:2022年07月13日 10:45:54   作者:魏波-  
這篇文章主要介紹了C語言之sizeof與strlen的使用及區(qū)別,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

先上一個(gè)例子:

結(jié)果: 

1、sizeof與strlen

char c[] = “abc\0cba”;

問題1:sizeof(c) = ?

問題2:strlen(c) = ?

問題3:執(zhí)行free(c);之后會(huì)有什么后果?

解答1:8

解答2:3   (判斷字符串a(chǎn)的長度,這個(gè)長度不包括"\0")

解答3:段錯(cuò)誤

2、short a[100],sizeof(a)返回? 

A 2     B 4       C 100       D 200        E 400 

答案:D

段錯(cuò)誤:指訪問的內(nèi)存超出了系統(tǒng)所給這個(gè)程序的內(nèi)存空間。

匯編語言的程序設(shè)計(jì)是分4個(gè)段來設(shè)計(jì)的,即用來放數(shù)據(jù)的數(shù)據(jù)段DS,臨時(shí)存放數(shù)據(jù)的堆棧段SS、存放程序代碼的代碼段、存放附加數(shù)據(jù)的附加段,每一段的最大存儲(chǔ)空間為64KB,跳轉(zhuǎn)指令、程序調(diào)用指令在轉(zhuǎn)移到地址沒有超過64KB地址空間范圍的叫段內(nèi)轉(zhuǎn)移,超出64KB地址空間范圍的叫段間轉(zhuǎn)移。這就是段內(nèi)和段間的含義。 

3、下列程序在32位 linux 或 unix 中的結(jié)果是什么?

void func(char *str)
{
	printf(" %d", sizeof(str));
	printf(" %d", strlen(str));
}
 
int main() 
{
	char a[] = "123456789";
	printf(" %d", sizeof(a));
	printf(" %d", strlen(a));
	func(a);
 
	getchar();
	return 0;
}

結(jié)果: 10 9 4 9

在C/C++里數(shù)組作為參數(shù)時(shí)傳遞的實(shí)際上是指向數(shù)組第一個(gè)元素的指針,因此sizeof(str)返回的是指針的大小,即4。所有的指針大小都是4。

下列程序在 64 位 linux 或 unix 中的結(jié)果是什么?

結(jié)果: 10 9 8 9

為什么在64位系統(tǒng)中指針的大小是8,而32位的卻是4? 

64位系統(tǒng),這個(gè)位數(shù)指的是CPU 里面的通用寄存器的數(shù)據(jù)寬度為64位,也就是說一個(gè)地址占二進(jìn)制位數(shù)是64,所以sizeof(double *)==sizeof(int *)==sizeof(char *)==64/8==8

32位系統(tǒng),同理,他的一個(gè)地址占32位二進(jìn)制空間,sizeof(double *)==sizeof(int *)==sizeof(char *)==32/8==4

其實(shí)明白了兩個(gè)系統(tǒng)的尋址原理就能明白,大體就是這個(gè)原因。地址跟系統(tǒng)有關(guān),但是基本數(shù)據(jù)類型占的大小是由C語言本身決定。 

4、sizeof與strlen的區(qū)別本質(zhì)上而言

不同點(diǎn):

(1)sizeof是一個(gè)運(yùn)算符,它用類型作為參數(shù),而strlen只是C庫提供的一個(gè)函數(shù),他用來計(jì)算以’/0’結(jié)果的字符串的長度,即它的參數(shù)只能是char*。

(2)strlen的結(jié)果要在運(yùn)行的時(shí)候才能計(jì)算出來,是用來計(jì)算字符串的實(shí)際長度,而sizeof的結(jié)果是在編譯的時(shí)候就計(jì)算過的,是類型或變量占內(nèi)存的大小。 注意:sizeof計(jì)算的是類型或者變量占內(nèi)存的大小。

相同點(diǎn):

(1)它們相同的地點(diǎn)就只是返回值,都是一個(gè)size_t類型的值。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++虛函數(shù)的實(shí)現(xiàn)機(jī)制分析

    C++虛函數(shù)的實(shí)現(xiàn)機(jī)制分析

    這篇文章主要介紹了C++虛函數(shù)的實(shí)現(xiàn)機(jī)制分析,需要的朋友可以參考下
    2014-07-07
  • C語言實(shí)現(xiàn)楊輝三角實(shí)例

    C語言實(shí)現(xiàn)楊輝三角實(shí)例

    這篇文章主要介紹了C語言實(shí)現(xiàn)楊輝三角的方法,主要通過數(shù)組簡單實(shí)現(xiàn),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-09-09
  • c++引用傳參和指針傳參的區(qū)別及說明

    c++引用傳參和指針傳參的區(qū)別及說明

    這篇文章主要介紹了c++引用傳參和指針傳參的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Qt實(shí)現(xiàn)無邊框窗口的示例代碼

    Qt實(shí)現(xiàn)無邊框窗口的示例代碼

    本文主要介紹了Qt實(shí)現(xiàn)無邊框窗口的示例代碼,主要包括鼠標(biāo)光標(biāo)在不同區(qū)域的變化,關(guān)閉拖動(dòng)窗口,窗口支持任意拉伸等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • C語言多媒體框架GStreamer使用教程深講

    C語言多媒體框架GStreamer使用教程深講

    GStreamer 是用來構(gòu)建流媒體應(yīng)用的開源多媒體框架(framework),其目標(biāo)是要簡化音/視頻應(yīng)用程序的開發(fā),已經(jīng)能夠被用來處理像 MP3、Ogg、MPEG1、MPEG2、AVI、Quicktime 等多種格式的多媒體數(shù)據(jù)
    2022-07-07
  • C語言中enum關(guān)鍵字的實(shí)現(xiàn)示例

    C語言中enum關(guān)鍵字的實(shí)現(xiàn)示例

    這篇文章主要介紹了C語言中enum關(guān)鍵字的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C語言圖書管理系統(tǒng)實(shí)驗(yàn)

    C語言圖書管理系統(tǒng)實(shí)驗(yàn)

    這篇文章主要為大家詳細(xì)介紹了C語言圖書管理系統(tǒng)實(shí)驗(yàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 關(guān)于C/C++中可變參數(shù)的詳細(xì)介紹(va_list,va_start,va_arg,va_end)

    關(guān)于C/C++中可變參數(shù)的詳細(xì)介紹(va_list,va_start,va_arg,va_end)

    可變參數(shù)的函數(shù)原理其實(shí)很簡單,而va系列是以宏定義來定義的,實(shí)現(xiàn)跟堆棧相關(guān).我們寫一個(gè)可變函數(shù)的C函數(shù)時(shí),有利也有弊,所以在不必要的場合,我們無需用到可變參數(shù)。如果在C++里,我們應(yīng)該利用C++的多態(tài)性來實(shí)現(xiàn)可變參數(shù)的功能,盡量避免用C語言的方式來實(shí)現(xiàn)
    2013-10-10
  • C語言實(shí)現(xiàn)十六進(jìn)制與二進(jìn)制的相互轉(zhuǎn)換

    C語言實(shí)現(xiàn)十六進(jìn)制與二進(jìn)制的相互轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了如何利用c語言實(shí)現(xiàn)將文件中十六進(jìn)制數(shù)據(jù)與二進(jìn)制數(shù)據(jù)相互轉(zhuǎn)換,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的可以學(xué)習(xí)一下
    2022-11-11
  • C++命名空間 namespace詳解

    C++命名空間 namespace詳解

    定義命名空間,使用namespace關(guān)鍵字,后面跟命名空間的名字,然后接一對花括號{ } 即可,{ }中即為命名空間的成員,這篇文章主要介紹了C++命名空間 namespace,需要的朋友可以參考下
    2023-04-04

最新評論