欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

先上一個例子:

結果: 

1、sizeof與strlen

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

問題1:sizeof(c) = ?

問題2:strlen(c) = ?

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

解答1:8

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

解答3:段錯誤

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

A 2     B 4       C 100       D 200        E 400 

答案:D

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

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

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

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;
}

結果: 10 9 4 9

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

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

結果: 10 9 8 9

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

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

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

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

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

不同點:

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

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

相同點:

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

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

相關文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    C語言圖書管理系統(tǒng)實驗

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

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

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

    C語言實現(xiàn)十六進制與二進制的相互轉換

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

    C++命名空間 namespace詳解

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

最新評論