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

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

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

一、概念         

sizeof:

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

strlen:

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

二、例題及解析

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

1.sizeof(數(shù)組名),這里的數(shù)組名表示整個數(shù)組,計算的是整個數(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計算出結果為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
	//總結: 只要是地址,不論什么類型,大小都為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));		//隨機值 strlen要找到\0才能返回數(shù)據(jù)的長度
	printf("%d\n", strlen(arr+0));		//隨機值
	printf("%d\n", strlen(*arr));		//err strlen(a)會把a的ASCII碼值97當作地址往后找
	printf("%d\n", strlen(arr[1]));		//err
	printf("%d\n", strlen(&arr));		//隨機值
	printf("%d\n", strlen(&arr+1));		//隨機值
	printf("%d\n", strlen(&arr[0]+1));	//隨機值
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));		//隨機值
	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));			//隨機值
	printf("%d\n", strlen(&p + 1));		//隨機值
	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ù)組名)計算第一行數(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 計算第四行的大小(即使沒有第四行)

三、總結

這些都是來自往年的筆試題,非常重要!??!學廢了嗎?!

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

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

相關文章

  • CMake 生成靜態(tài)庫與動態(tài)庫的方法步驟

    CMake 生成靜態(tài)庫與動態(tài)庫的方法步驟

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

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

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

    C++11 強類型枚舉相關總結

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

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

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

    C語言創(chuàng)建和操作單鏈表數(shù)據(jù)結構的實例教程

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

    C++如何計算二進制數(shù)中1的個數(shù)

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

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

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

    淺析C語言初階的常量和變量

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

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

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

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

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

最新評論

抚顺市| 顺平县| 罗山县| 剑阁县| 西和县| 庄浪县| 阿图什市| 牡丹江市| 房山区| 五莲县| 日土县| 梁山县| 崇信县| 克山县| 曲松县| 广汉市| 白城市| 秭归县| 巴林左旗| 峡江县| 治县。| 资阳市| 福泉市| 五寨县| 治多县| 富源县| 岳阳市| 界首市| 霍州市| 襄垣县| 大竹县| 凤凰县| 阿城市| 景泰县| 兰坪| 株洲县| 营口市| 遂宁市| 汉沽区| 崇义县| 蒙山县|