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

C語言strlen和sizeof在數組中的使用詳解

 更新時間:2021年10月12日 10:08:48   作者:執(zhí)久呀  
對于 strlen 和 sizeof,相信不少程序員會混淆其功能。雖然從表面上看它們都可以求字符串的長度,但二者卻存在著許多不同之處及本質區(qū)別

一、前言

前面我們詳細講了sizeof和strlen中的使用,基本涉及了所有一維數組可以和常見的題目類型

那么現(xiàn)在我們就將一維數組告一段落了,現(xiàn)在我們來開始講解在二維數組的使用了,本篇是

sizeof和strlen的最后一篇了。

二、sizeof在二維數組的試題

#include<stdio.h>
 
int main()
{
	int a[3][4] = { 0 };
 
	printf("%d\n", sizeof(a));
 
	printf("%d\n", sizeof(a[0]));
 
	printf("%d\n", sizeof(a[0][0]));
 
	printf("%d\n", sizeof(a[0]+1));
 
	printf("%d\n", sizeof(*(a[0]+1)));
 
	printf("%d\n", sizeof(a+1));
 
	printf("%d\n", sizeof(*(a+1)));
 
	printf("%d\n", sizeof(&a[0]+1));
 
	printf("%d\n", sizeof(*(&a[0] + 1)));
 
	printf("%d\n", sizeof(*a));
 
	printf("%d\n", sizeof(a[3]));
 
	return 0;
}

解讀:

對于二維數組來說,其實可以看成個一維數組,以行為單位,第一行可以看成以為首元素,

以此類推,這樣我們就得到了一個一維數組,但是要記得這里的每個元素都是一個數組名。

比如對于上面的二維數組來說a[3][4]完全等價于a{a[0],a[1],a[2]},其中每個元素都是一個一

維數組,單獨的每個元素如a[0]是數組名,表示的是a[0]這個一維數組的首元素地址。

題解:

第一題:sizeof(a),a是數組名,單獨放在sizeof里表示的是整個數組,所以大小是12*4=48

字節(jié)。

第二題:sizeof(a[0]),前面我們說道,這個就相當于一個一維數組,a[0]表示的是數組名,數

組名單獨放在sizeof中計算的整個數組的大小,也就是a[0]那行的大小,因為前面說過了把二

數組看成一維數組,每一行看成其中的每一個元素,然后每個元素就是一個一維數組

sizeof(a[0])就是求出第一行的大小,故大小是4*4=16字節(jié)。

第三題:sizeof(a[0][0]),a[0][0]表示的是第一行第一個元素,所以大小是4字節(jié)。

第四題:sizeof(a[0]+1),a[0]不是單獨放在sizeof中的,所以他表示的是首元素地址,因為

我們說過對于二維數組來說,每一個行都可以表示一個一維數,所以a[0]+1,表示的是第二個

元素的地址,既然是地址那就是4或8字節(jié)

第五題:sizeof(*(a[0]+1)),上一題我們說到,a[0]+1表示的是第一行第二個元素的地址

*(a[0]+1)表示的是拿到第一行第二個元素的值,所以大小是4字節(jié)。

第六題:sizeof(a+1),其中a沒有單獨放在sizeof里,因為是二維數組,所以表示的是第一行

的地址,a+1,第一行的地址加1表示的是第二行的地址,既然是地址那大小就是4或8字節(jié)。

第七題:sizeof(*(a+1)),上面那題已經解釋過了a+1表示的是第二行的地址,那么*(a+1)

表示的是拿到第二行的所有元素,所以大小是4*4=16字節(jié)。

第八題:sizeof(&a[0]+1),&a[0]+1表示拿到第二行的地址,既然是地址那就是4或8字節(jié)。

第九題:sizeof(*(&a[0] + 1)),&a[0]+1表示的是第二行的地址,*(&a[0] + 1)表示的是拿到

第二行的所有元素,,所以大小是4*4=16字節(jié) 。

第十題:sizeof(*a),*a表示拿到第一行所有元素,所以大小是4*4=16字節(jié)。

第十一題:sizeof(a[3]),a[3]雖然表面上越界了,但是sizeof是不會去運算的,故還是和

前面的一維數組一樣的大小為16字節(jié)。

答案驗證:

64位平臺下:

32位平臺下:

此類篇幅完結了,歡迎大佬們指正

那咱們下期見

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

相關文章

  • C程序中Ubuntu、stm32的內存分配問題

    C程序中Ubuntu、stm32的內存分配問題

    這篇文章主要介紹了C程序中Ubuntu、stm32的內存分配問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • C語言中cJSON的使用

    C語言中cJSON的使用

    JSON是一種輕量級的數據交換格式,常用于在網絡之間傳輸數據,本文主要介紹了C語言中cJSON的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • 詳解C++中的函數調用和下標以及成員訪問運算符的重載

    詳解C++中的函數調用和下標以及成員訪問運算符的重載

    這篇文章主要介紹了詳解C++中的函數調用和下標以及成員訪問運算符,講到了這些二元運算符使用的語法及重載,需要的朋友可以參考下
    2016-01-01
  • C語言實現(xiàn)獲取文件MD5值

    C語言實現(xiàn)獲取文件MD5值

    MD5(Message?Digest?Algorithm?5)是一種常用的哈希函數算法,這篇文章主要介紹了C語言如何獲取文件MD5值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-08-08
  • C++基于單鏈表實現(xiàn)學生成績管理系統(tǒng)

    C++基于單鏈表實現(xiàn)學生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++基于單鏈表實現(xiàn)學生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • ubuntu系統(tǒng)vscodeC++編譯環(huán)境配置與使用方式

    ubuntu系統(tǒng)vscodeC++編譯環(huán)境配置與使用方式

    這篇文章主要介紹了ubuntu系統(tǒng)vscodeC++編譯環(huán)境配置與使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C++關鍵字typename的深入理解

    C++關鍵字typename的深入理解

    本篇文章是對C++中的關鍵字typename進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言中new與malloc的區(qū)別詳解

    C語言中new與malloc的區(qū)別詳解

    這篇文章主要介紹了C語言中new與malloc的區(qū)別詳解,new是運算符,可以用于動態(tài)分配,如果想要撤銷內存使用delete,new運算符使用的一般格式為new類型,用new分配數組空間時不能指定初值,需要的朋友可以參考下
    2023-10-10
  • Visual?Studio?2022?配置?PCL?1.12.1?的問題小結

    Visual?Studio?2022?配置?PCL?1.12.1?的問題小結

    這篇文章主要介紹了Visual?Studio?2022?配置?PCL?1.12.1?的經驗總結分享,本文通過圖文實例相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • C++回溯算法中組合的相關問題分析

    C++回溯算法中組合的相關問題分析

    回溯算法并不是什么高效的算法,因為本質上時去遍歷所有元素,找出所有可能,然后選出需要的答案。那為什么還要回溯法,簡單來說,不是所有的問題都能用什么巧妙的方法來解決的
    2023-03-03

最新評論

开远市| 深州市| 台湾省| 七台河市| 淳安县| 望都县| 尼木县| 德惠市| 华容县| 突泉县| 沂源县| 普安县| 正蓝旗| 富裕县| 济南市| 桐城市| 英吉沙县| 广饶县| 五华县| 绥宁县| 大竹县| 桃园市| 闸北区| 河津市| 布尔津县| 调兵山市| 沙田区| 万盛区| 大埔县| 怀宁县| 定西市| 东兰县| 密山市| 巫山县| 哈尔滨市| 叶城县| 兰溪市| 万山特区| 太仆寺旗| 茌平县| 邹城市|