真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【c進(jìn)階】指針進(jìn)階(為零基礎(chǔ)學(xué)者提供的詳細(xì)講解)-創(chuàng)新互聯(lián)

目錄

為隆堯等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及隆堯網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、隆堯網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

1,字符指針(char*)

2,指針數(shù)組

3,數(shù)組指針

4,數(shù)組參數(shù),指針參數(shù)

4.1二維數(shù)組傳參

4.2二級(jí)指針傳參

5,函數(shù)指針

6,?函數(shù)指針數(shù)組

7,回調(diào)函數(shù)

【重量級(jí)】指針進(jìn)階的經(jīng)典試題


大家好,博主今天來(lái)給大家講解進(jìn)階指針,希望喜歡的朋友三連一下哦!

1,字符指針(char*)

字符指針有兩種使用方法:

1,

2,

注意:這里是將字符串的首個(gè)字符的地址賦給了pstr.

3,常量字符串

在2例中,"hello bit."是常量字符串,創(chuàng)建在常量區(qū)(只讀存儲(chǔ)器),無(wú)法修改。

我們發(fā)現(xiàn)程序崩了,沒有打印任何東西。

然而如果沒有去強(qiáng)行修改(這里只是這么說(shuō),實(shí)際上我們無(wú)法修改),程序是會(huì)正常運(yùn)行的,

但是如果用一個(gè)數(shù)組存儲(chǔ)字符串的話,這里的字符串存儲(chǔ)在棧區(qū),是可以修改的。

為了防止錯(cuò)誤,最好使用const修飾,如:

這樣就會(huì)起到提醒自己的作用。

還有一個(gè)方法證明:

這里str3和str4指向的是一個(gè)同一個(gè)常量字符串。C/C++會(huì)把常量字符串存儲(chǔ)到單獨(dú)的一個(gè)內(nèi)存區(qū)域(常量區(qū)),當(dāng)幾個(gè)指針。指向同一個(gè)字符串的時(shí)候,他們實(shí)際會(huì)指向同一塊內(nèi)存。但是用相同的常量字符串去初始化不同的數(shù)組的時(shí)候就會(huì)開辟出不同的內(nèi)存塊(棧區(qū))。所以str1和str2不同,str3和str4不同。

2,指針數(shù)組

即存放指針的數(shù)組

要重點(diǎn)和數(shù)組指針區(qū)分開

int* arr[5]----指針數(shù)組(arr先和[]結(jié)合)

int? (*arr)[5]------數(shù)組指針(arr先和*j結(jié)合)

3,數(shù)組指針

數(shù)組指針是一種指向數(shù)組的指針。

使用:

數(shù)組指針常用于二維數(shù)組,如:

數(shù)組名arr,表示首元素的地址
但是二維數(shù)組的首元素是二維數(shù)組的第一行

4,數(shù)組參數(shù),指針參數(shù) 4.1二維數(shù)組傳參

以上是以數(shù)組形式設(shè)置形參,以下是以指針形式設(shè)置形參:

運(yùn)行證明,在例子中,只有int (*arr)[5]可以作為二維數(shù)組的形參,是一個(gè)數(shù)組指針。

4.2二級(jí)指針傳參

當(dāng)函數(shù)的參數(shù)為二級(jí)指針的時(shí)候,可以接收什么參數(shù)?

可以接受一個(gè)普通的二級(jí)指針,也可以接受一個(gè)指針數(shù)組的數(shù)組名,這個(gè)數(shù)組名就相當(dāng)于一個(gè)二級(jí)指針。?

5,函數(shù)指針

首先看一段代碼:

輸出的地址相同,這說(shuō)明? &函數(shù)名? 和? 函數(shù)名本身? 都可以表示函數(shù)的地址。

那函數(shù)的地址怎么存儲(chǔ)呢?

比如這個(gè)函數(shù)

void test()
{
printf("hehe\n");

}

要用void (*pfun1)();來(lái)存儲(chǔ)。

pfun1可以存放。pfun1先和*結(jié)合,說(shuō)明pfun1是指針,指針指向的是一個(gè)函數(shù),指向的函數(shù)無(wú)參
數(shù),返回值類型為void。

注:括號(hào)代表著函數(shù)。

6,?函數(shù)指針數(shù)組

如何定義?

int (*parr1[10])();

parr1 先和 [] 結(jié)合,說(shuō)明 parr1是數(shù)組,數(shù)組的內(nèi)容是什么呢?是 int (*)() 類型的函數(shù)指針。

函數(shù)指針數(shù)組的應(yīng)用(簡(jiǎn)化代碼),例如:

我們要寫一個(gè)簡(jiǎn)單的計(jì)算器:

但是我們發(fā)現(xiàn)這個(gè)代碼有個(gè)問(wèn)題,就是非常的冗余,比如:在switch中,我們反復(fù)寫了好幾個(gè)printf();

為什么會(huì)這樣呢?

因?yàn)檫@個(gè)代碼的加減乘除計(jì)算器的實(shí)現(xiàn)各不相同,所以我們必須寫出四種情況,每種情況又不得不

寫一些必要的代碼:? ?printf();? scanf();

經(jīng)過(guò)分析,要解決冗余問(wèn)題,需要一個(gè)能夠?qū)⑸鲜龃a不同之處(四種計(jì)算的實(shí)現(xiàn))統(tǒng)一起來(lái)的結(jié)構(gòu),這個(gè)時(shí)候就需要函數(shù)指針數(shù)組。

這樣就可以將四種計(jì)算用一個(gè)函數(shù)指針數(shù)組統(tǒng)一起來(lái),簡(jiǎn)潔許多。

7,回調(diào)函數(shù)

回調(diào)函數(shù)就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)
函數(shù),當(dāng)這個(gè)指針被用來(lái)調(diào)用其所指向的函數(shù)時(shí),我們就說(shuō)這是回調(diào)函數(shù)。回調(diào)函數(shù)不是由該函數(shù)
的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的一方調(diào)用的,用于對(duì)該事件或條件進(jìn)

行響應(yīng)。

那么,回調(diào)函數(shù)有什么用呢?

比如:在6.函數(shù)指針數(shù)組中,我們嘗試用函數(shù)指針數(shù)組簡(jiǎn)化了一個(gè)計(jì)算器代碼,而回調(diào)函數(shù)同樣可以:

這樣寫就可以做到:傳哪個(gè)函數(shù)的地址就調(diào)用哪個(gè)函數(shù),當(dāng)然要保證函數(shù)的返回值和參數(shù)類型相同。

再比如:使用qsort();函數(shù)時(shí)需要用到回調(diào)函數(shù)

嗯,那么這里需要介紹一下qsort();函數(shù)

如上,qsort();是用于進(jìn)行快速排序的,返回值為void,參數(shù)有四個(gè):

1,void*base

它代表著目標(biāo)數(shù)組的首個(gè)元素的地址,那為什么是void*呢,因?yàn)槲覀儫o(wú)法預(yù)測(cè)數(shù)組元素的類型,所以我們不能寫成任意一個(gè)確定的類型,必須要寫成可以接受任何類型指針的void*.但是void*不是確切類型,所以不能進(jìn)行解引用和加減整數(shù)。在使用時(shí),需要將其強(qiáng)制轉(zhuǎn)換為具體類型的指針。

2,size_t? num

size_t? num其實(shí)是unsigned int類型,代表著數(shù)組元素的個(gè)數(shù)。

3,size_t? width

width代表著數(shù)組中每個(gè)元素的字節(jié)大小

4,int (__cdecl *compare)(const void *elem1, const void *elem2)

這位更是重量級(jí),它是一個(gè)函數(shù)指針,而它指向的函數(shù),則需要qsort();的使用者來(lái)進(jìn)行設(shè)計(jì)

如上,此函數(shù)的返回值是int類型,共有三種情況:大于0,小于0,等于0。而函數(shù)則需要根據(jù)這三種情況來(lái)排序。

函數(shù)的參數(shù)是兩個(gè)void*指針,并且由const修飾,此處用void*的原因同上,都是因?yàn)椴恢罃?shù)組元素的具體類型。

接下來(lái),上實(shí)例:

這樣就可以實(shí)現(xiàn)排序,可以再試試排列其他的元素。

如上,結(jié)構(gòu)體的成員也可以很好的排序。

【重量級(jí)】指針進(jìn)階的經(jīng)典試題

首先,我們先總結(jié)一些知識(shí)點(diǎn):

1. sizeof(數(shù)組名),這里的數(shù)組名表示整個(gè)數(shù)組,計(jì)算的是整個(gè)數(shù)組的大小。
2. &數(shù)組名,這里的數(shù)組名表示整個(gè)數(shù)組,取出的是整個(gè)數(shù)組的地址。
3. 除此之外所有的數(shù)組名都表示首元素的地址。

4,對(duì)于二維數(shù)組,首個(gè)元素就是第一行,是一個(gè)一維數(shù)組,首個(gè)元素的地址就是第一行的地址。

5,對(duì)于看不懂的題目,可以用arr[i]==*(arr+i)來(lái)轉(zhuǎn)換。

6,如果往一個(gè)字符數(shù)組里存儲(chǔ)字符串,會(huì)自帶‘\0’? ? ,? ?但是如果是一個(gè)一個(gè)的存儲(chǔ)字符,就沒有‘\0’,如下圖

7,對(duì)于二維數(shù)組,比如arr[3][5]

arr 是整個(gè)二維數(shù)組的數(shù)組名,是首個(gè)元素的地址,也是第一行的地址,相當(dāng)于(arr+0)

arr[0]相當(dāng)于第一行的數(shù)組名,是個(gè)一維數(shù)組的數(shù)組名,相當(dāng)于第一行的首元素的地址,即*(arr+0)

8.最重要的就是不要馬虎,要細(xì)致,要熟知內(nèi)存如何訪問(wèn),運(yùn)算符的優(yōu)先級(jí)

1,

分析:&a拿到的是整個(gè)數(shù)組的地址,其實(shí)就相當(dāng)于int (*p)[4],? 解引用訪問(wèn)的是整個(gè)數(shù)組,所以打印的結(jié)果是整個(gè)數(shù)組的字節(jié)大小,即16.

另外:sizeof;的返回類型是size_t,其實(shí)就是unsigned long long ,所以要用%llu來(lái)打印。

2,

此題結(jié)果是16。

為什么呢?難道不會(huì)越界訪問(wèn)嗎?

其實(shí)在運(yùn)算符(操作符)中我們就提到過(guò)(不知道的可以去看,就在我的主頁(yè)上),sizeof括號(hào)內(nèi)部的內(nèi)容是不會(huì)真正被執(zhí)行的,所以我們根本就沒有訪問(wèn)數(shù)組,何談越界訪問(wèn)?只是看一下大小而已。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


新聞名稱:【c進(jìn)階】指針進(jìn)階(為零基礎(chǔ)學(xué)者提供的詳細(xì)講解)-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://weahome.cn/article/pposi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部