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

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

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

一、概念         

sizeof:

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

strlen:

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

二、例題及解析

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

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

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

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

2.1 一維數(shù)組

int a[] = { 1,2,3,4 };
	printf("%d\n", sizeof(a));		   //16  a是整個(gè)數(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個(gè)字節(jié)
	printf("%d\n", sizeof(*&a));       //16  *和&抵消
	printf("%d\n", sizeof(&a+1));      //4   4個(gè)字節(jié)的地址,跳過(guò)了4
	printf("%d\n", sizeof(&a[0]));	   //4
	printf("%d\n", sizeof(&a[0]+1));   //4
	//總結(jié): 只要是地址,不論什么類(lèi)型,大小都為4個(gè)字節(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個(gè)字節(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ù)的長(zhǎng)度
	printf("%d\n", strlen(arr+0));		//隨機(jī)值
	printf("%d\n", strlen(*arr));		//err strlen(a)會(huì)把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個(gè)字節(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個(gè)字節(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開(kāi)始數(shù)

2.3 二維數(shù)組

	int a[3][4] = { 0 };
	printf("%d\n", sizeof(a));			 
	//48  二維數(shù)組中sizeof(a),a同樣表示整個(gè)數(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ù)組指針的解引用,訪問(wèn)的是一個(gè)數(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ì)算第四行的大小(即使沒(méi)有第四行)

三、總結(jié)

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

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

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

相關(guān)文章

  • CMake 生成靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的方法步驟

    CMake 生成靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的方法步驟

    本文主要介紹了CMake 生成靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • C語(yǔ)言:傳值與傳址交換整數(shù)

    C語(yǔ)言:傳值與傳址交換整數(shù)

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中傳值與傳址之間交換整數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語(yǔ)言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • C++11 強(qiáng)類(lèi)型枚舉相關(guān)總結(jié)

    C++11 強(qiáng)類(lèi)型枚舉相關(guān)總結(jié)

    這篇文章主要介紹了C++11 強(qiáng)類(lèi)型枚舉的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++11,感興趣的朋友可以了解下
    2021-02-02
  • C/C++ Qt 基本文件讀寫(xiě)的基本使用(2種實(shí)現(xiàn))

    C/C++ Qt 基本文件讀寫(xiě)的基本使用(2種實(shí)現(xiàn))

    文件的讀寫(xiě)是很多應(yīng)用程序具有的功能,本文主要介紹了兩種實(shí)現(xiàn)方法,第一種使用QFile類(lèi)的IODevice讀寫(xiě)功能直接讀寫(xiě),第二種是利用 QFile和QTextStream結(jié)合起來(lái),用流的方式進(jìn)行文件讀寫(xiě)
    2021-11-11
  • C語(yǔ)言創(chuàng)建和操作單鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例教程

    C語(yǔ)言創(chuàng)建和操作單鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例教程

    這篇文章主要介紹了C語(yǔ)言創(chuàng)建和操作單鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例教程,講解使用C語(yǔ)言實(shí)現(xiàn)鏈表結(jié)構(gòu)時(shí)指針的使用,需要的朋友可以參考下
    2016-04-04
  • C++如何計(jì)算二進(jìn)制數(shù)中1的個(gè)數(shù)

    C++如何計(jì)算二進(jìn)制數(shù)中1的個(gè)數(shù)

    這篇文章主要介紹了C++如何計(jì)算二進(jìn)制數(shù)中1的個(gè)數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • VS2022 CUDA環(huán)境配置的實(shí)現(xiàn)步驟

    VS2022 CUDA環(huán)境配置的實(shí)現(xiàn)步驟

    本文主要介紹了VS2022 CUDA環(huán)境配置的實(shí)現(xiàn)步驟,文中通過(guò)圖文示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 淺析C語(yǔ)言初階的常量和變量

    淺析C語(yǔ)言初階的常量和變量

    在C程序執(zhí)行過(guò)程中,其值不發(fā)生改變的量稱(chēng)為常量,其值可變的量稱(chēng)為變量,本文將帶你了解什么是常量和變量,以及使用方法,需要的朋友可以參考下
    2023-05-05
  • C語(yǔ)言中atoi函數(shù)模擬實(shí)現(xiàn)詳析

    C語(yǔ)言中atoi函數(shù)模擬實(shí)現(xiàn)詳析

    atoi函數(shù)功能是將數(shù)字字符串轉(zhuǎn)換為整數(shù),比如數(shù)字字符串"12345"被atoi轉(zhuǎn)換為12345,數(shù)字字符串"-12345"被轉(zhuǎn)換為-12345,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中atoi函數(shù)模擬實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • C++中引用處理的基本方法

    C++中引用處理的基本方法

    引用不是新定義了一個(gè)變量,而是給已經(jīng)存在的變量取了一個(gè)別名,編譯器不會(huì)為引用變量開(kāi)辟內(nèi)存空間,他和他引用的變量共用一塊內(nèi)存空間,下面這篇文章主要給大家介紹了關(guān)于C++中引用處理的基本方法,需要的朋友可以參考下
    2022-12-12

最新評(píng)論

高碑店市| 思茅市| 锦州市| 垫江县| 西乡县| 高淳县| 荔浦县| 西乡县| 会同县| 东方市| 香格里拉县| 中山市| 宁波市| 察雅县| 西乌珠穆沁旗| 东源县| 广西| 旬邑县| 五华县| 天柱县| 博客| 伊吾县| 博野县| 金秀| 汉沽区| 西贡区| 丹阳市| 伊春市| 灵武市| 洛川县| 襄汾县| 仲巴县| 乐昌市| 安达市| 大安市| 云阳县| 游戏| 安陆市| 特克斯县| 樟树市| 遂溪县|