電商平臺圖片素材seo平臺是什么意思
目錄
- 二維數(shù)組
- 例題一
- 例題二
- 例題三
- 例題四
- 例題五
- 例題六
- 例題七
- 例題八
- 例題九
- 例題十
- 例題十一
- 結(jié)果
感謝各位大佬對我的支持,如果我的文章對你有用,歡迎點擊以下鏈接
🐒🐒🐒個人主頁
🥸🥸🥸C語言
🐿?🐿?🐿?C語言例題
🐣🐓🏀python
二維數(shù)組
1:int a[3][4] = {0};
2:printf("%d\n",sizeof(a));
3:printf("%d\n",sizeof(a[0][0]));
4:printf("%d\n",sizeof(a[0]));
5:printf("%d\n",sizeof(a[0]+1));
6:printf("%d\n",sizeof(*(a[0]+1)));
7:printf("%d\n",sizeof(a+1));
8:printf("%d\n",sizeof(*(a+1)));
9:printf("%d\n",sizeof(&a[0]+1));
10:printf("%d\n",sizeof(*(&a[0]+1)));
11:printf("%d\n",sizeof(*a));
12:printf("%d\n",sizeof(a[3]));
在做之前我們再來復(fù)習(xí)一下數(shù)組名的意義
- sizeof(數(shù)組名),這里的數(shù)組名表示整個數(shù)組,計算的是整個數(shù)組的大小。
- &數(shù)組名,這里的數(shù)組名表示整個數(shù)組,取出的是整個數(shù)組的地址。
- 除此之外所有的數(shù)組名都表示首元素的地址
例題一
1:int a[3][4] = {0};
2:printf("%d\n",sizeof(a));
這里的a是整個數(shù)組的地址,所以sizeof會計算整個數(shù)組的內(nèi)存大小,因此結(jié)果就是(3*4)(數(shù)組的元素)*4(整形類型的大小)=48
例題二
1:int a[3][4] = {0};
2:printf("%d\n",sizeof(a[0][0]));
這里的a[0][0]是指的數(shù)組首元素,因為是特別指定的一個元素,所以只需要計算整個元素的內(nèi)存大小即可,因此a[0][0]是一個整形類型的元素,結(jié)果就是4
例題三
1:int a[3][4] = {0};
2:printf("%d\n",sizeof(a[0]));
a[0]是表示的第一行的數(shù)組元素,為了方便理解,我們暫時將數(shù)組中的元素改變一下,調(diào)試結(jié)果如圖
顯然這里的a[0]是指的數(shù)組第一行,而不是第一列,第一行元素有4個,因此結(jié)果應(yīng)該是4(第一行元素)*4(整形類型的大小)=16
另外這里順便補充一下
我們可以將二維數(shù)組表示成這樣
但實際上二維數(shù)組的存儲方式和上圖是有一些區(qū)別的
這是每一行的地址,我們再來看一下每個元素的地址
這是每一行的每一個元素,地址的表示方式是16進制,因此我們可以看出每一個元素的地址相差為4個字節(jié),第二行的首元素和第一行末尾的元素地址相差也是4個字節(jié),因此我們可以推斷出,二維數(shù)組的存儲是下一行首元素地址接在上一行末尾元素的地址上,存儲方式如圖
例題四
1:int a[3][4] = {0};
2:printf("%d\n",sizeof(a[0]+1));
這里可能會有人非常糾結(jié),a[0]+1是直接跳過第一行,還是直接跳過第一行的第一個元素,我們來看看調(diào)試的結(jié)果
a[0]+1是跳過第一行第一個元素,但是我們可以看到單獨的a[0]卻表示的整個第一行元素,這是為什么呢?
其實二維數(shù)組我們可以這樣寫(下面的元素是為了方便理解所以改的)
a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},這有點類似于數(shù)學(xué)中的換元
這里我們將二維數(shù)組看出一維數(shù)組,將二維數(shù)組的每一行元素整體看成一個元素,{1,2,3,4}就相當(dāng)于換元中的t ,而要換的元素就是1,2,3,4
因此a[0]就是換元之后的第一個元素,a[0]={1,2,3,4},而a[0]+1就是在換元前的四個元素中尋找第二個元素
例題五
1:int a[3][4] = {0};
2:printf("%d\n",sizeof(*(a[0]+1)));
上一題已經(jīng)講過了a[0]+1是第一行中的第二個元素,對這個元素解引用就是一個整形類型,所以結(jié)果就是4
這里我們可以看出a[0]+1其實是一個地址,所以我們可以推斷二維數(shù)組存的是一位數(shù)組的地址,也就是說a[3]={&b[0],&b[1],&b[2],&b[3]},這里的數(shù)組b就是每一行的元素
例題六
1:int a[3][4] = {0};
2:printf("%d\n",sizeof(a+1));
這里的a不是單獨放在括號里的,所以a表示第一行的地址,a+1就是跳過第一行,所以a+1=a[1]是第二行的地址,既然是地址結(jié)果就為4或者8
例題七
1:int a[3][4] = {0};
2:printf("%d\n",sizeof(*(a+1));
這里的a+1上一題已經(jīng)說過了,是第二行的地址,對第二行地址解引用,就是第二行的四個元素,所以結(jié)果就是4*4=16
例題八
1:int a[3][4] = {0};
2:printf("%d\n",sizeof(&a[0]+1));
&a[0]是第一韓的地址,&a[0]+1為第二行的地址所以結(jié)果為4或者8,也可以用前面換元的思想去理解,
a[3][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},這里的a[0]是第一個{0,0,0,0},而a[0]+1=a[1]
a[1]=第二個{0,0,0,0},但注意這里的是&a[0]+1,&a[0]+1=&a[1]
例題九
1:int a[3][4] = {0};
2:printf("%d\n",sizeof(*(&a[0]+1)));
對第二行的地址進行解引用就是第二行的四個元素,所以結(jié)果就是4*4=16
例題十
1:int a[3][4] = {0};
2:printf("%d\n",sizeof(*a));
這里的a因為不是單獨放在括號里的(有個號),所以這里的a就表示第一行元素,結(jié)果就是44=16
例題十一
1:int a[3][4] = {0};
2:printf("%d\n",sizeof(a[3]));
a[3]和之前的a[0] a[1]是一樣的,表示的是第四行元素,結(jié)果就是4*4=16