欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言例題講解指針與數(shù)組

 更新時(shí)間:2022年07月07日 09:00:38   作者:龍兆萬(wàn)  
在C語(yǔ)言和C++等語(yǔ)言中,數(shù)組元素全為指針變量的數(shù)組稱為指針數(shù)組,指針數(shù)組中的元素都必須具有相同的存儲(chǔ)類(lèi)型、指向相同數(shù)據(jù)類(lèi)型的指針變量。指針數(shù)組比較適合用來(lái)指向若干個(gè)字符串,使字符串處理更加方便、靈活

1.概要復(fù)習(xí)

本篇的內(nèi)容主要圍繞指針與數(shù)組、指針與字符串等之間的關(guān)系,以及進(jìn)一步理解sizeof 、strlen 的使用與意義。

數(shù)組是指具有相同類(lèi)型元素的集合,字符串常量是一個(gè)指向在連續(xù)空間里存放的字符的首字符的地址的指針。我們會(huì)在下面理解數(shù)組與字符串?dāng)?shù)組的不同。

sizeof 是一個(gè)操作符,是計(jì)算類(lèi)型空間大小的。strlen 是針對(duì)字符串的庫(kù)函數(shù),用來(lái)求字符串的長(zhǎng)度。

對(duì)于數(shù)組來(lái)說(shuō),數(shù)組名都是首元素地址,除了這兩種情況外:

  • sizeof(數(shù)組名)——sizeof內(nèi)部單獨(dú)放置數(shù)組名表整個(gè)數(shù)組
  • &數(shù)組名——對(duì)數(shù)組名進(jìn)行取地址操作表取出整個(gè)數(shù)組的地址

2.指針與數(shù)組筆試題

我們的目的是求下面各個(gè) printf 語(yǔ)句輸出什么。

2.1一維數(shù)組

#include <stdio.h>
int main()
{
	int a[] = { 1,2,3,4 };
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(a + 0));
	printf("%d\n", sizeof(*a));
	printf("%d\n", sizeof(a + 1));
	printf("%d\n", sizeof(a[1]));
	printf("%d\n", sizeof(&a));
	printf("%d\n", sizeof(*&a));
	printf("%d\n", sizeof(&a + 1));
	printf("%d\n", sizeof(&a[0]));
	printf("%d\n", sizeof(&a[0] + 1));
	return 0;
}
#include <stdio.h>
int main()
{
	int a[] = { 1,2,3,4 };
	printf("%d\n", sizeof(a));
	//sizeof 內(nèi)部單獨(dú)放置數(shù)組名,計(jì)算整個(gè)數(shù)組的大小,結(jié)果為 4(int類(lèi)型)*4(元素個(gè)數(shù))=16
	printf("%d\n", sizeof(a + 0));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,此時(shí)數(shù)組名表首元素地址,a+0 依然表示首元素地址
	//故 sizeof 計(jì)算一個(gè)地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(*a));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,此時(shí)數(shù)組名表首元素地址,*a 表對(duì)該地址解引用
	//即可得到 a 數(shù)組的第一個(gè)元素,大小為 4(int類(lèi)型)
	printf("%d\n", sizeof(a + 1));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,此時(shí)數(shù)組名表首元素地址,a+1 表第二個(gè)元素地址
	//故 sizeof 計(jì)算一個(gè)地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(a[1]));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,a[1] 表數(shù)組的第二個(gè)元素,此寫(xiě)法可轉(zhuǎn)置為 *(a+1)
	//即計(jì)算的結(jié)果是第二個(gè)元素的類(lèi)型大小,即 4(int類(lèi)型)
	printf("%d\n", sizeof(&a));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,而是放置了 &a ,表取出整個(gè)數(shù)組的地址
	//故 sizeof 計(jì)算一個(gè)地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(*&a));
	//sizeof 內(nèi)部雖然看似沒(méi)有單獨(dú)放置數(shù)組名,但是通過(guò) &a 取出整個(gè)數(shù)組地址
	//然后通過(guò) * 找到整個(gè)地址,與 sizeof(a) 沒(méi)有差別
	//故這里的 sizeof 計(jì)算的也是整個(gè)數(shù)組的大小,即 4(int類(lèi)型)*4(元素個(gè)數(shù))=16
	printf("%d\n", sizeof(&a + 1));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,&a+1 表取出整個(gè)數(shù)組的地址,并向后跳躍一個(gè)數(shù)組類(lèi)型的大小
	//即此時(shí)的地址是指向元素 4 的后面一塊 int 類(lèi)型的內(nèi)存空間
	//故 sizeof 計(jì)算地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(&a[0]));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,&a[0] 表取出數(shù)組第一個(gè)元素的地址
	//故 sizeof 計(jì)算地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(&a[0] + 1));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,&a[0]+1 表取出數(shù)組第一個(gè)元素地址并向后跳躍一個(gè) int 類(lèi)型的大小
	//故 sizeof 計(jì)算的是地址(指針)的大小為 4 or 8
	return 0;
}

2.2字符數(shù)組

#include <stdio.h>
int main()
{
	char arr[] = { 'a','b','c','d','e','f' };
	printf("%d\n", sizeof(arr));
	printf("%d\n", sizeof(arr + 0));
	printf("%d\n", sizeof(*arr));
	printf("%d\n", sizeof(arr[1]));
	printf("%d\n", sizeof(&arr));
	printf("%d\n", sizeof(&arr + 1));
	printf("%d\n", sizeof(&arr[0] + 1));
	printf("%d\n", strlen(arr));
	printf("%d\n", strlen(arr + 0));
	printf("%d\n", strlen(*arr));
	printf("%d\n", strlen(arr[1]));
	printf("%d\n", strlen(&arr));
	printf("%d\n", strlen(&arr + 1));
	printf("%d\n", strlen(&arr[0] + 1));
	return 0;
}
#include <stdio.h>
int main()
{
	char arr[] = { 'a','b','c','d','e','f' };//非字符串?。。。。?!
	printf("%d\n", sizeof(arr));
	//sizeof 內(nèi)部單獨(dú)放置數(shù)組名,故計(jì)算的是整個(gè)數(shù)組的大小
	//即大小為 1(char類(lèi)型)*6(元素個(gè)數(shù))=6
	printf("%d\n", sizeof(arr + 0));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,arr 表數(shù)組首元素地址,arr+0 亦表示首元素地址
	//故 sizeof 計(jì)算地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(*arr));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,arr 表數(shù)組首元素地址,*arr 表對(duì)該地址解引用
	//便得到數(shù)組第一個(gè)元素 'a' ,故大小為 1(char類(lèi)型)
	printf("%d\n", sizeof(arr[1]));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,arr[1] 表數(shù)組第二個(gè)元素,即 'b'
	//故大小為 1(char類(lèi)型)
	printf("%d\n", sizeof(&arr));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,&arr 表取出整個(gè)數(shù)組的地址
	//故 sizeof 計(jì)算的地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(&arr + 1));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,&arr+1 表取出整個(gè)數(shù)組的地址并向后跳躍一個(gè)數(shù)組類(lèi)型的大小
	//即指向元素 'f' 后一個(gè) char 類(lèi)型的空間
	//故 sizeof 計(jì)算的是地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(&arr[0] + 1));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,&arr[0]+1 表取出數(shù)組一個(gè)元素的地址并向后跳躍一個(gè) char 類(lèi)型的大小
	//故 sizeof 計(jì)算的地址(指針)的大小為 4 or 8
	printf("%d\n", strlen(arr));
	//strlen 不是 sizeof ,故 arr 表數(shù)組首元素地址,strlen 會(huì)以此地址開(kāi)始向后尋找 '\0'
	//但此數(shù)組并不包含 '\0' ,故 strlen 的返回值為隨機(jī)值
	printf("%d\n", strlen(arr + 0));
	//strlen 不是 sizeof ,arr+0 表首元素地址,strlen 的返回值也是一個(gè)隨機(jī)值
	printf("%d\n", strlen(*arr));
	//strlen 不是 sizeof ,*arr 表對(duì)數(shù)組首元素地址解引用,得到字符 'a' ,其 ASCLL 碼值為 97
	//strlen 會(huì)以 97 為起始地址向后尋找 '\0' 
	//但個(gè)人理解認(rèn)為:97 是一個(gè)沒(méi)有初始化的指針(地址),即野指針
	//故這里會(huì)報(bào)錯(cuò)
	printf("%d\n", strlen(arr[1]));
	//arr[1] 表數(shù)組的第二個(gè)元素 'b' ,其 ASCLL 碼值為 98
	//strlen 會(huì)以 98 為起始地址向后尋找 '\0'
	//但個(gè)人理解認(rèn)位:98 是一個(gè)沒(méi)有初始化的指針(地址),即野指針
	//故這里依然會(huì)報(bào)錯(cuò)
	printf("%d\n", strlen(&arr));
	//&arr 表取出整個(gè)數(shù)組的地址,strlen 會(huì)以此作為起始地址向后尋找 '\0'
	//這里需要注意,在 strlen 的函數(shù)聲明當(dāng)中,參數(shù)是一個(gè) char* 類(lèi)型的指針
	//也就是我們雖然傳參時(shí)傳了一個(gè)數(shù)組指針,但是 strlen 接收時(shí)會(huì)自動(dòng)強(qiáng)轉(zhuǎn)為 char* 類(lèi)型指針
	//故數(shù)組并不包含 '\0' ,strlen 的返回值是一個(gè)隨機(jī)值
	printf("%d\n", strlen(&arr + 1));
	//&arr+1 表取出整個(gè)數(shù)組的地址并向后跳躍一個(gè)數(shù)組類(lèi)型的大小
	//即指向了元素 'f' 的后一塊 char 類(lèi)型的空間
	//strlen 會(huì)以此地址作為起始地址向后尋找 '\0'
	//但因我們無(wú)法確定 '\0' 的位置,所以 strlen 的返回值是一個(gè)隨機(jī)值
	printf("%d\n", strlen(&arr[0] + 1));
	//&arr[0]+1 表取出數(shù)組首元素地址并向后跳躍一個(gè) char 類(lèi)型的大小
	//即指向了元素 'b' ,strlen 會(huì)以此地址作為起始地址向后尋找 '\0'
	//但數(shù)組中并不包含 '\0' ,故 strlen 的返回值是一個(gè)隨機(jī)值
	return 0;
}

我們把報(bào)錯(cuò)的兩條語(yǔ)句注釋掉:

2.3字符串?dāng)?shù)組

#include <stdio.h>
int main()
{
	char arr[] = "abcdef";
	printf("%d\n", sizeof(arr));
	printf("%d\n", sizeof(arr + 0));
	printf("%d\n", sizeof(*arr));
	printf("%d\n", sizeof(arr[1]));
	printf("%d\n", sizeof(&arr));
	printf("%d\n", sizeof(&arr + 1));
	printf("%d\n", sizeof(&arr[0] + 1));
	printf("%d\n", strlen(arr));
	printf("%d\n", strlen(arr + 0));
	printf("%d\n", strlen(*arr));
	printf("%d\n", strlen(arr[1]));
	printf("%d\n", strlen(&arr));
	printf("%d\n", strlen(&arr + 1));
	printf("%d\n", strlen(&arr[0] + 1));
	return 0;
}
#include <stdio.h>
int main()
{
	char arr[] = "abcdef";//注意數(shù)組里面放的是字符串?。?!
	printf("%d\n", sizeof(arr));
	//sizeof 內(nèi)部單獨(dú)放置數(shù)組名,即計(jì)算整個(gè)數(shù)組的大小
	//大小為 1(char類(lèi)型)*7(元素個(gè)數(shù))=7
	printf("%d\n", sizeof(arr + 0));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,arr+0 表數(shù)組首元素地址
	//故 sizeof 計(jì)算地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(*arr));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,*arr 表對(duì)數(shù)組首元素地址解引用
	//即得到字符 'b' ,故大小為 1(char類(lèi)型)
	printf("%d\n", sizeof(arr[1]));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,arr[1] 表數(shù)組第二個(gè)元素即字符 'b'
	//故大小為 1(char類(lèi)型)
	printf("%d\n", sizeof(&arr));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,&arr 表對(duì)整個(gè)數(shù)組取地址
	//故 sizeof 計(jì)算的地址(指針)大小為 4 or 8
	printf("%d\n", sizeof(&arr + 1));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,&arr+1 表取出整個(gè)數(shù)組地址并向后跳躍一個(gè)數(shù)組類(lèi)型大小
	//即指向元素 '\0' 后面一塊數(shù)組類(lèi)型大小的空間
	//故 sizeof 計(jì)算的地址(指針)大小為 4 or 8
	printf("%d\n", sizeof(&arr[0] + 1));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,&arr[0]+1 表取出數(shù)組首元素地址并向后跳躍一個(gè) char 類(lèi)型大小
	//即指向數(shù)組第二個(gè)元素
	//故 sizeof 計(jì)算的地址(指針)大小為 4 or 8
	printf("%d\n", strlen(arr));
	//strlen 不是 sizeof ,arr 表數(shù)組首元素地址,strlen 會(huì)以此為起始地址向后尋找 '\0'
	//因?yàn)榇藬?shù)組包含 '\0' ,故 strlen 的返回值為 6
	printf("%d\n", strlen(arr + 0));
	//arr+0 表數(shù)組首元素地址,strlen 會(huì)以此地址為起始地址向后尋找 '\0'
	//因?yàn)榇藬?shù)組包含 '\0' ,故 strlen 的返回值為 6
	printf("%d\n", strlen(*arr));
	//*arr 表對(duì)數(shù)組首元素地址解引用,得到字符 'a' ,其 ASCLL 碼值為 97
	//故 strlen 會(huì)以此地址為起始地址向后尋找 '\0'
	//但個(gè)人理解認(rèn)位: 97 是一個(gè)沒(méi)有初始化的指針(地址),即野指針
	//故這里會(huì)報(bào)錯(cuò)
	printf("%d\n", strlen(arr[1]));
	//arr[1] 表數(shù)組第二個(gè)元素,即字符 'b' ,其 ASCLL 碼值為 98
	//strlen 會(huì)以此地址會(huì)起始地址向后尋找 '\0'
	//但個(gè)人理解認(rèn)位:98 是一個(gè)沒(méi)有初始化的指針(地址),即野指針
	//故這里會(huì)報(bào)錯(cuò)
	printf("%d\n", strlen(&arr));
	//&arr 表取出整個(gè)數(shù)組的地址,但觀察 strlen 函數(shù)的聲明可以發(fā)現(xiàn)
	//strlen 的函數(shù)參數(shù)是一個(gè) char* 類(lèi)型的指針
	//即我們傳參傳進(jìn)去的是一個(gè)數(shù)組指針,當(dāng) strlen 接收的時(shí)候,會(huì)將其強(qiáng)轉(zhuǎn)為字符指針
	//故 strlen 會(huì)以數(shù)組首元素地址為起始地址,向后尋找 '\0'
	//因?yàn)閿?shù)組包含 '\0' ,故 strlen 的返回值為 6
	printf("%d\n", strlen(&arr + 1));
	//&arr+1 表取出整個(gè)數(shù)組的地址并向后跳躍一個(gè)數(shù)組類(lèi)型大小
	//即指向 '\0' 后一塊數(shù)組類(lèi)型的空間
	//strlen 會(huì)以此地址為起始地址向后尋找 '\0'
	//但我們無(wú)法確定 '\0' 的具體位置,所以 strlen 會(huì)返回一個(gè)隨機(jī)值
	printf("%d\n", strlen(&arr[0] + 1));
	//&arr[0]+1 表取出數(shù)組首元素地址并向后跳躍一個(gè) char 類(lèi)型的大小
	//即指向了數(shù)組第二個(gè)元素的地址
	//strlen 會(huì)以此地址作為起始地址向后尋找 '\0'
	//故 strlen 的返回值為 5
	return 0;
}

我們把報(bào)錯(cuò)的語(yǔ)句注釋掉:

2.4字符串指針

#include <stdio.h>
int main()
{
	char* p = "abcdef";//p 變量存放的是字符串常量的首元素地址
	printf("%d\n", sizeof(p));
	//sizeof 計(jì)算地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(p + 1));
	//p+1 表字符串常量的第二個(gè)元素的地址
	//故 sizeof 計(jì)算的地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(*p));
	//*p 表對(duì)字符串常量首元素地址解引用。得到字符 'a'
	//故計(jì)算的大小為 1(char類(lèi)型)
	printf("%d\n", sizeof(p[0]));
	//p[0] 可改寫(xiě)成 *(p+0) ,表對(duì)字符串常量首元素地址解引用,得到字符 'a'
	//即計(jì)算的大小為 1(char類(lèi)型)
	printf("%d\n", sizeof(&p));
	//&p 表對(duì) char* 類(lèi)型指針取地址
	//故 sizeof 計(jì)算的地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(&p + 1));
	//&p+1 表對(duì) char* 類(lèi)型指針變量 p 取地址并向后跳躍一個(gè) char 類(lèi)型的大小
	//指向的空間是未知的
	//但 sizeof 計(jì)算的地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(&p[0] + 1));
	//&p[0]+1 可改寫(xiě)成 &(*(p+0))+1 ,表取出字符串常量的首元素地址并向后跳躍一個(gè) char 類(lèi)型的大小
	//即指向了字符 'b'
	//故 sizeof 計(jì)算的地址(指針)的大小為 4 or 8
	printf("%d\n", strlen(p));
	//strlen 不是 sizeof ,p表字符串首元素地址
	//strlen 以此地址為起始地址,向后尋找 '\0'
	//故 strlen 的返回值為 6
	printf("%d\n", strlen(p + 1));
	//p+1 表字符串常量的第二個(gè)元素的地址,strlen 會(huì)以此為地址向后尋找 '\0'
	//故 strlen 的返回值為 5
	printf("%d\n", strlen(*p));
	//*p 表字符串常量首元素,即字符 'a',strlen 會(huì)以此為地址向后尋找 '\0'
	//但個(gè)人理解人為:'a' 的 ASCLL 碼值為 97 ,但 97 是一個(gè)沒(méi)有被初始化的指針(地址),即野指針
	//故這里會(huì)報(bào)錯(cuò)
	printf("%d\n", strlen(p[0]));
	//p[0] 可改寫(xiě)成 *(p+0) ,表字符串常量首元素,即字符 'a',其 ASCLL 碼值為 97
	//strlen 會(huì)以此地址為起始地址向后尋找 '\0'
	//但個(gè)人理解認(rèn)位:97 是一個(gè)沒(méi)有被初始化的指針(地址),即野指針
	//故這里會(huì)報(bào)錯(cuò)
	printf("%d\n", strlen(&p));
	//&p 表取出 char* 類(lèi)型指針變量的地址,strlen 以此地址為起始地址向后尋找 '\0'
	//但我們無(wú)法確定 '\0' 的位置
	//故 strlen 會(huì)返回一個(gè)隨機(jī)值
	printf("%d\n", strlen(&p + 1));
	//&p+1 表取出 char* 類(lèi)型指針變量的地址并向后跳躍一個(gè) char 類(lèi)型的大小,strlen 以此地址為起始地址向后尋找 '\0'
	//但我們無(wú)法確定 '\0'的位置,故 strlen 的返回值會(huì)返回一個(gè)隨機(jī)值
	printf("%d\n", strlen(&p[0] + 1));
	//*p{0}+1 可改寫(xiě)為 &(*(p+0))+1 ,表取出字符串常量首元素地址并向后跳躍一個(gè) char 類(lèi)型的大小
	//即指向了字符串常量的第二個(gè)元素的地址,strlen 會(huì)以此地址為起始地址向后尋找 '\0'
	//故 strlen 的返回值為 5
	return 0;
}

我們對(duì)報(bào)錯(cuò)的兩條語(yǔ)句注釋?zhuān)?/p>

2.5二維數(shù)組

#include <stdio.h>
int main()
{
	int a[3][4] = { 0 };
	printf("%d\n", sizeof(a));
	//sizeof 內(nèi)部放置的是數(shù)組名,故計(jì)算整個(gè)數(shù)組的大小
	//即大小為 4(int類(lèi)型)*12(元素個(gè)數(shù))=48
	printf("%d\n", sizeof(a[0][0]));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,a[0][p] 表數(shù)組首元素
	//故 sizeof 的計(jì)算值為 4(int類(lèi)型)
	printf("%d\n", sizeof(a[0]));
	//sizeof 內(nèi)部放置的看似不是單獨(dú)的數(shù)組名,但 a[0] 表數(shù)組的第一個(gè)元素
	//此元素也是一個(gè)數(shù)組
	//故 sizeof 計(jì)算的大小為 4(int類(lèi)型)*4(元素個(gè)數(shù))=16
	printf("%d\n", sizeof(a[0] + 1));
	//sizeof 內(nèi)部放置的不是單獨(dú)的數(shù)組名,a[0] 表二維數(shù)組的第一個(gè)元素,即拿到了一個(gè)數(shù)組
	//a[0]+1 表二維數(shù)組的第一個(gè)數(shù)組元素的地址并向后跳躍一個(gè) int 類(lèi)型的大小
	//故 sizeof 計(jì)算的地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(*(a[0] + 1)));
	//*(a[0]+1) 表對(duì)二維數(shù)組的第一個(gè)數(shù)組元素的地址并向后跳躍一個(gè) int 類(lèi)型的大小的解引用
	//即找到了二維數(shù)組中的某一個(gè)元素
	//故 sizeof 計(jì)算的大小為 4(int類(lèi)型)
	printf("%d\n", sizeof(a + 1));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,a+1 表二維數(shù)組的首元素地址并向后跳躍一個(gè)一維數(shù)組類(lèi)型的大小
	//即指向了二維數(shù)組的第二個(gè)數(shù)組元素的地址
	//故 sizeof 計(jì)算的地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(*(a + 1)));
	//*(a+1) 表對(duì)二維數(shù)組的首元素地址并向后跳躍一個(gè)一維數(shù)組類(lèi)型的大小的解引用
	//即得到了二維數(shù)組的第二個(gè)元素
	//此元素為一個(gè)一維數(shù)組,故 sizeof 計(jì)算的大小為 4(int類(lèi)型)*4(元素個(gè)數(shù))=16
	printf("%d\n", sizeof(&a[0] + 1));
	//&a[0]+1 表二維數(shù)組的首元素取地址并向后跳躍一個(gè)一維數(shù)組的類(lèi)型大小
	//指向了二維數(shù)組的第二個(gè)元素
	//故 sizeof 計(jì)算的地址(指針)的大小為 4 or 8
	printf("%d\n", sizeof(*(&a[0] + 1)));
	//*(&a[0]+1) 表對(duì)二維數(shù)組的首元素取地址并向后跳躍一個(gè)一維數(shù)組的類(lèi)型大小的解引用
	//即得到了二維數(shù)組的第二個(gè)元素
	//此元素是一個(gè)一維數(shù)組,故 sizeof 計(jì)算的大小的 4(int類(lèi)型)*4(元素個(gè)數(shù))=16
	printf("%d\n", sizeof(*a));
	//sizeof 內(nèi)部沒(méi)有單獨(dú)放置數(shù)組名,*a 表對(duì)二維數(shù)組首元素地址解引用
	//得到一個(gè)一維數(shù)組
	//故 sizeof 計(jì)算的大小為 4(int類(lèi)型)*4(元素個(gè)數(shù))=16
	printf("%d\n", sizeof(a[3]));
	//a[3] 表二維數(shù)組的第三個(gè)元素
	//需要說(shuō)明的是,sizeof 只對(duì)類(lèi)型感興趣
	//也就是說(shuō),二維數(shù)組雖然不存在第三個(gè)元素,但它的類(lèi)型依舊是二維數(shù)組
	//故 sizeof 計(jì)算的是 4(int類(lèi)型)*4(元素個(gè)數(shù))=16
	return 0;
}

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

相關(guān)文章

  • MFC實(shí)現(xiàn)連連看游戲之消子算法

    MFC實(shí)現(xiàn)連連看游戲之消子算法

    這篇文章主要為大家詳細(xì)介紹了MFC實(shí)現(xiàn)連連看游戲之消子算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 實(shí)例分享cmake編譯一個(gè)簡(jiǎn)單c++項(xiàng)目(demo)

    實(shí)例分享cmake編譯一個(gè)簡(jiǎn)單c++項(xiàng)目(demo)

    下面通過(guò)一個(gè)小例子來(lái)說(shuō)明cmake編譯一個(gè)c++項(xiàng)目,生成可執(zhí)行文件,需要的朋友可以參考下
    2020-02-02
  • C++ leetcode之刪除并獲得點(diǎn)數(shù)的示例代碼

    C++ leetcode之刪除并獲得點(diǎn)數(shù)的示例代碼

    這篇文章主要介紹了C++ leetcode之刪除并獲得點(diǎn)數(shù)的示例代碼,本文給大家分享問(wèn)題解析及解決方案,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • C++ 封裝 DLL 供 C# 調(diào)用詳細(xì)介紹

    C++ 封裝 DLL 供 C# 調(diào)用詳細(xì)介紹

    這篇文章主要介紹了C++ 封裝 DLL 供 C# 調(diào)用(以C# 調(diào)用C++ 二次封裝的VLC播放庫(kù)為介質(zhì),支持回調(diào)函數(shù)的封裝),需要的朋友可以參考下面我文章的具體內(nèi)容
    2021-09-09
  • C語(yǔ)言楊氏矩陣中查找元素的示例代碼

    C語(yǔ)言楊氏矩陣中查找元素的示例代碼

    本文主要介紹了C語(yǔ)言楊氏矩陣中查找元素的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C語(yǔ)言開(kāi)發(fā)實(shí)現(xiàn)掃雷游戲

    C語(yǔ)言開(kāi)發(fā)實(shí)現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言開(kāi)發(fā)實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C++?超詳細(xì)講解stack與queue的使用

    C++?超詳細(xì)講解stack與queue的使用

    C++?Stack(堆棧)?是一個(gè)容器類(lèi)的改編,為程序員提供了堆棧的全部功能,也就是說(shuō)實(shí)現(xiàn)了一個(gè)先進(jìn)后出(FILO)的數(shù)據(jù)結(jié)構(gòu),許多程序都使用了?queue?容器。queue?容器可以用來(lái)表示超市的結(jié)賬隊(duì)列或服務(wù)器上等待執(zhí)行的數(shù)據(jù)庫(kù)事務(wù)隊(duì)列
    2022-03-03
  • C++第11版本中的一些強(qiáng)大的新特性小結(jié)

    C++第11版本中的一些強(qiáng)大的新特性小結(jié)

    這篇文章主要介紹了C++第11版本中的一些強(qiáng)大的新特性小結(jié),需要的朋友可以參考下
    2015-12-12
  • C++數(shù)據(jù)結(jié)構(gòu)關(guān)于棧迷宮求解示例

    C++數(shù)據(jù)結(jié)構(gòu)關(guān)于棧迷宮求解示例

    這篇文章主要為大家介紹了C++數(shù)據(jù)結(jié)構(gòu)關(guān)于棧的迷宮求解示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • C/C++?QT實(shí)現(xiàn)解析JSON文件的示例代碼

    C/C++?QT實(shí)現(xiàn)解析JSON文件的示例代碼

    JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,它是基于ECMAScript的一個(gè)子集,使用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù)。這篇文章主要介紹了QT實(shí)現(xiàn)解析JSON文件的示例代碼,需要的可以參考一下
    2022-01-01

最新評(píng)論