C語言strlen和sizeof在數(shù)組中的使用詳解
一、前言
前面我們詳細講了sizeof和strlen中的使用,基本涉及了所有一維數(shù)組可以和常見的題目類型
那么現(xiàn)在我們就將一維數(shù)組告一段落了,現(xiàn)在我們來開始講解在二維數(shù)組的使用了,本篇是
sizeof和strlen的最后一篇了。
二、sizeof在二維數(shù)組的試題
#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;
}
解讀:
對于二維數(shù)組來說,其實可以看成個一維數(shù)組,以行為單位,第一行可以看成以為首元素,
以此類推,這樣我們就得到了一個一維數(shù)組,但是要記得這里的每個元素都是一個數(shù)組名。
比如對于上面的二維數(shù)組來說a[3][4]完全等價于a{a[0],a[1],a[2]},其中每個元素都是一個一
維數(shù)組,單獨的每個元素如a[0]是數(shù)組名,表示的是a[0]這個一維數(shù)組的首元素地址。
題解:
第一題:sizeof(a),a是數(shù)組名,單獨放在sizeof里表示的是整個數(shù)組,所以大小是12*4=48
字節(jié)。
第二題:sizeof(a[0]),前面我們說道,這個就相當于一個一維數(shù)組,a[0]表示的是數(shù)組名,數(shù)
組名單獨放在sizeof中計算的整個數(shù)組的大小,也就是a[0]那行的大小,因為前面說過了把二
數(shù)組看成一維數(shù)組,每一行看成其中的每一個元素,然后每個元素就是一個一維數(shù)組
sizeof(a[0])就是求出第一行的大小,故大小是4*4=16字節(jié)。
第三題:sizeof(a[0][0]),a[0][0]表示的是第一行第一個元素,所以大小是4字節(jié)。
第四題:sizeof(a[0]+1),a[0]不是單獨放在sizeof中的,所以他表示的是首元素地址,因為
我們說過對于二維數(shù)組來說,每一個行都可以表示一個一維數(shù),所以a[0]+1,表示的是第二個
元素的地址,既然是地址那就是4或8字節(jié)
第五題:sizeof(*(a[0]+1)),上一題我們說到,a[0]+1表示的是第一行第二個元素的地址
*(a[0]+1)表示的是拿到第一行第二個元素的值,所以大小是4字節(jié)。
第六題:sizeof(a+1),其中a沒有單獨放在sizeof里,因為是二維數(shù)組,所以表示的是第一行
的地址,a+1,第一行的地址加1表示的是第二行的地址,既然是地址那大小就是4或8字節(jié)。
第七題:sizeof(*(a+1)),上面那題已經(jīng)解釋過了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是不會去運算的,故還是和
前面的一維數(shù)組一樣的大小為16字節(jié)。
答案驗證:
64位平臺下:

32位平臺下:

此類篇幅完結(jié)了,歡迎大佬們指正
那咱們下期見
到此這篇關(guān)于C語言strlen和sizeof在數(shù)組中的使用詳解的文章就介紹到這了,更多相關(guān)C語言 strlen內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解C++中的函數(shù)調(diào)用和下標以及成員訪問運算符的重載
這篇文章主要介紹了詳解C++中的函數(shù)調(diào)用和下標以及成員訪問運算符,講到了這些二元運算符使用的語法及重載,需要的朋友可以參考下2016-01-01
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)境配置與使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
Visual?Studio?2022?配置?PCL?1.12.1?的問題小結(jié)
這篇文章主要介紹了Visual?Studio?2022?配置?PCL?1.12.1?的經(jīng)驗總結(jié)分享,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08

