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

C語言sizeof和strlen的指針和數(shù)組面試題詳解

 更新時間:2022年04月12日 10:19:49   作者:scut-ALong  
strlen是函數(shù),字符串長度,不包括停止符。而sizeof則是內(nèi)存塊的大小,包括停止符。數(shù)組是一種數(shù)據(jù)類型,數(shù)據(jù)類型的本質(zhì)就是固定大小,內(nèi)存塊的別名??梢杂胹izeof()一般都是數(shù)據(jù)類型

一、概念         

sizeof:

sizeof操作符的結(jié)果類型為size_t,(它在頭文件用typedfe定義為unsigned int類型),計(jì)算的是分配空間的實(shí)際字節(jié)數(shù)。sizeof是運(yùn)算符,可以以類型、函數(shù)、做參數(shù) 。

strlen:

strlen結(jié)果類型也為size_t(size_t strlen( const char *string )),但strlen是計(jì)算的空間中字符的個數(shù)(不包括‘\0’)。strlen是函數(shù),只能以char*(字符串)做參數(shù)。而且,要想得到的結(jié)果正確必須包含 ‘\0’(通過strlen的實(shí)現(xiàn)得知)。

二、例題及解析

首先我們需要知道數(shù)組名的意義:

1.sizeof(數(shù)組名),這里的數(shù)組名表示整個數(shù)組,計(jì)算的是整個數(shù)組的大小。

2.&數(shù)組名,這里的數(shù)組名表示整個數(shù)組,取出的是整個數(shù)組的地址。

3.除此之外所有的數(shù)組名都表示首元素的地址。

2.1 一維數(shù)組

int a[] = { 1,2,3,4 };
	printf("%d\n", sizeof(a));		   //16  a是整個數(shù)組的大小,sizeof計(jì)算出結(jié)果為16字節(jié)
	printf("%d\n", sizeof(a+0));       //4   a是首元素的地址
	printf("%d\n", sizeof(*a));		   //4	  首元素地址的解引用
	printf("%d\n", sizeof(a+1));	   //4   2的地址
	printf("%d\n", sizeof(a[1]));      //4
	printf("%d\n", sizeof(&a));		   //4   &a數(shù)組的地址,4個字節(jié)
	printf("%d\n", sizeof(*&a));       //16  *和&抵消
	printf("%d\n", sizeof(&a+1));      //4   4個字節(jié)的地址,跳過了4
	printf("%d\n", sizeof(&a[0]));	   //4
	printf("%d\n", sizeof(&a[0]+1));   //4
	//總結(jié): 只要是地址,不論什么類型,大小都為4個字節(jié)

2.2 字符數(shù)組

char arr[] = { 'a','b','c','d','e','f' };
	printf("%d\n", sizeof(arr));		//6
	printf("%d\n", sizeof(arr+0));		//4  首元素地址為4個字節(jié)
	printf("%d\n", sizeof(*arr));		//1
	printf("%d\n", sizeof(arr[1]));		//1
	printf("%d\n", sizeof(&arr));		//4
	printf("%d\n", sizeof(&arr+1));		//4
	printf("%d\n", sizeof(&arr[0]+1));	//4
 
	printf("%d\n", strlen(arr));		//隨機(jī)值 strlen要找到\0才能返回?cái)?shù)據(jù)的長度
	printf("%d\n", strlen(arr+0));		//隨機(jī)值
	printf("%d\n", strlen(*arr));		//err strlen(a)會把a(bǔ)的ASCII碼值97當(dāng)作地址往后找
	printf("%d\n", strlen(arr[1]));		//err
	printf("%d\n", strlen(&arr));		//隨機(jī)值
	printf("%d\n", strlen(&arr+1));		//隨機(jī)值
	printf("%d\n", strlen(&arr[0]+1));	//隨機(jī)值
char arr[] = "abcdef";
	printf("%d\n", sizeof(arr));			//7  arr是數(shù)組的地址
	printf("%d\n", sizeof(arr + 0));		//4  arr是首元素的地址
	printf("%d\n", sizeof(*arr));			//1
	printf("%d\n", sizeof(arr[1]));			//1
	printf("%d\n", sizeof(&arr));			//4  數(shù)組的地址 4個字節(jié)
	printf("%d\n", sizeof(&arr + 1));		//4
	printf("%d\n", sizeof(&arr[0] + 1));	//4
 
	printf("%d\n", strlen(arr));			//6
	printf("%d\n", strlen(arr + 0));		//6
	printf("%d\n", strlen(*arr));			//err 
	printf("%d\n", strlen(arr[1]));			//err
	printf("%d\n", strlen(&arr));			//6
	printf("%d\n", strlen(&arr + 1));		//隨機(jī)值
	printf("%d\n", strlen(&arr[0] + 1));	//5
char *p = "abcdef";
	printf("%d\n", sizeof(p));			//4  p是指針變量,求指針變量的大小,為4個字節(jié)
	printf("%d\n", sizeof(p + 1));		//4  p+1為b的地址
	printf("%d\n", sizeof(*p));			//1
	printf("%d\n", sizeof(p[0]));		//1
	printf("%d\n", sizeof(&p));;		//4  指針p的地址
	printf("%d\n", sizeof(&p + 1));		//4
	printf("%d\n", sizeof(&p[0] + 1));	//4  b的地址
 
	printf("%d\n", strlen(p));			//6
	printf("%d\n", strlen(p + 1));		//5
	printf("%d\n", strlen(*p));			//err strlen需要傳入地址
	printf("%d\n", strlen(p[0]));		//err
	printf("%d\n", strlen(&p));			//隨機(jī)值
	printf("%d\n", strlen(&p + 1));		//隨機(jī)值
	printf("%d\n", strlen(&p[0] + 1));	//5  從b開始數(shù)

2.3 二維數(shù)組

	int a[3][4] = { 0 };
	printf("%d\n", sizeof(a));			 
	//48  二維數(shù)組中sizeof(a),a同樣表示整個數(shù)組
	printf("%d\n", sizeof(a[0][0]));	 
	//4 
	printf("%d\n", sizeof(a[0]));		 
	//16 a[0]可看作第一行的數(shù)組名,sizeof(數(shù)組名)計(jì)算第一行數(shù)組大小
	printf("%d\n", sizeof(a[0] + 1)); 	 
	//4  a[0]表示第一行首元素地址,即a[0][0]地址,再+1為a[0][1]地址
	printf("%d\n", sizeof(*(a[0] + 1))); 
	//4  
	printf("%d\n", sizeof(a + 1));		 
	//4  a為第一行一維數(shù)組的地址,+1為第二行的地址
	printf("%d\n", sizeof(*(a + 1)));	 
	//16 第二行地址的解引用,是數(shù)組指針的解引用,訪問的是一個數(shù)組的大小
	printf("%d\n", sizeof(&a[0] + 1));	 
	//4  第一行地址+1,得第二行地址
	printf("%d\n", sizeof(*(&a[0] + 1)));
	//16 第二行的大小
	printf("%d\n", sizeof(*a));			 
	//16 第一行地址解引用是第一行的大小
	printf("%d\n", sizeof(a[3]));		 
	//16 計(jì)算第四行的大小(即使沒有第四行)

三、總結(jié)

這些都是來自往年的筆試題,非常重要!?。W(xué)廢了嗎?!

建議收藏反復(fù)閱讀思考,加深對指針、數(shù)組和內(nèi)存的理解?。。?/p>

到此這篇關(guān)于C語言sizeof和strlen的指針和數(shù)組面試題詳解的文章就介紹到這了,更多相關(guān)C語言 指針和數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中auto類型說明符詳解(附易錯實(shí)例)

    C++中auto類型說明符詳解(附易錯實(shí)例)

    這篇文章主要給大家介紹了關(guān)于C++中auto類型說明符的相關(guān)資料,文中還附易錯實(shí)例,在C++11中引入了auto類型說明符,用它就能讓編譯器替我們?nèi)シ治霰磉_(dá)式所屬的類型,需要的朋友可以參考下
    2023-07-07
  • C++中Boost.Chrono時間庫的使用方法

    C++中Boost.Chrono時間庫的使用方法

    chrono是一個time library, 源于boost,現(xiàn)在已經(jīng)是C++11標(biāo)準(zhǔn)了,下面這篇文章主要給大家介紹了關(guān)于C++中Boost.Chrono時間庫的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • C++版本簡易Flappy bird

    C++版本簡易Flappy bird

    這篇文章主要介紹了C++版本簡易Flappy bird的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • C語言的多級指針你了解嗎

    C語言的多級指針你了解嗎

    這篇文章主要介紹了C語言中的多級指針,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下,希望能給你帶來幫助
    2021-08-08
  • C++11中std::declval的實(shí)現(xiàn)機(jī)制淺析

    C++11中std::declval的實(shí)現(xiàn)機(jī)制淺析

    這篇文章主要給大家介紹了關(guān)于C++11中std::declval實(shí)現(xiàn)機(jī)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • C語言中單目操作符++、–的實(shí)例講解

    C語言中單目操作符++、–的實(shí)例講解

    C語言的操作符共分為算術(shù)操作符,移位操作符,位操作符,賦值操作符,單目操作符,關(guān)系操作符,邏輯操作符,條件操作符,逗號表達(dá)式,下表引用、函數(shù)調(diào)用和結(jié)構(gòu)成員這10大類,這篇文章主要給大家介紹了關(guān)于C語言中單目操作符++、–的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • C++中bitset位圖介紹及模擬實(shí)現(xiàn)

    C++中bitset位圖介紹及模擬實(shí)現(xiàn)

    位圖就是用每一位來存放某種狀態(tài),適用于海量數(shù)據(jù),本文就介紹一下C++中bitset位圖介紹及模擬實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-07-07
  • C++函數(shù)重載的細(xì)節(jié)圖文詳解

    C++函數(shù)重載的細(xì)節(jié)圖文詳解

    函數(shù)重載即函數(shù)名相同,函數(shù)形參列表不同(函數(shù)特征標(biāo)不同)的一類函數(shù)稱為函數(shù)重載,下面這篇文章主要給大家介紹了關(guān)于C++函數(shù)重載的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 用C語言如何打印一個等腰三角形

    用C語言如何打印一個等腰三角形

    這篇文章主要介紹了用C語言如何打印一個等腰三角形,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 詳解C語言中return返回函數(shù)局部變量的問題

    詳解C語言中return返回函數(shù)局部變量的問題

    本文主要介紹了C語言中return返回函數(shù)局部變量的問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論