www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 技術(shù)學(xué)院 > 技術(shù)前線
[導(dǎo)讀]數(shù)組和指針在使用上還有一些區(qū)別。首先,數(shù)組名代表整個(gè)數(shù)組,可以用來初始化其他數(shù)組,但數(shù)組名不能被賦值或自增。其次,數(shù)組在函數(shù)調(diào)用時(shí),傳遞的是數(shù)組的地址,而不是整個(gè)數(shù)組。指針可以被賦值或自增。指針還可以用來動(dòng)態(tài)分配內(nèi)存空間,這是數(shù)組無法做到的。指針也可以用來實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)結(jié)構(gòu),如鏈表、樹等。

?數(shù)組和指針在定義、使用場(chǎng)景、內(nèi)存分配和訪問方式等方面存在顯著區(qū)別。?

定義和使用場(chǎng)景

?數(shù)組?:數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)多個(gè)相同類型的數(shù)據(jù)元素。數(shù)組在編譯時(shí)就已經(jīng)確定了內(nèi)存空間的大小和位置,且一旦創(chuàng)建,其大小和位置不能改變。?

?指針?:指針是一個(gè)變量,存儲(chǔ)的是另一個(gè)變量的內(nèi)存地址。指針可以在運(yùn)行時(shí)動(dòng)態(tài)地指向不同的內(nèi)存位置,具有更高的靈活性。

內(nèi)存分配和訪問方式

?數(shù)組?:數(shù)組在內(nèi)存中是連續(xù)存放的,訪問數(shù)組元素通過下標(biāo)直接訪問。數(shù)組的內(nèi)存空間在編譯時(shí)或運(yùn)行時(shí)確定,且一旦分配,其大小和位置不能改變。?

指針?:指針本身是一個(gè)變量,可以指向任何類型的內(nèi)存地址。通過解引用操作符*來訪問指針?biāo)赶虻膬?nèi)存中的值。指針可以動(dòng)態(tài)地指向不同的內(nèi)存位置,靈活性更高。

語法和操作

?數(shù)組?:數(shù)組名代表整個(gè)數(shù)組的起始地址,不能被修改。數(shù)組的每個(gè)元素可以通過下標(biāo)直接訪問,例如array[i]。數(shù)組的大小在編譯時(shí)確定,不能動(dòng)態(tài)調(diào)整。?

?指針?:指針需要顯式地賦值才能指向具體的內(nèi)存位置。通過解引用操作符*來訪問指針指向的值,例如*p。指針可以動(dòng)態(tài)地指向不同的內(nèi)存位置,靈活性更高。

指針數(shù)組:首先它是一個(gè)數(shù)組,數(shù)組的元素都是指針,數(shù)組占多少個(gè)字節(jié)由數(shù)組本身的大小決定,每一個(gè)元素都是一個(gè)指針,它是“儲(chǔ)存指針的數(shù)組”的簡(jiǎn)稱。

數(shù)組指針:首先它是一個(gè)指針,它指向一個(gè)數(shù)組,至于它指向的數(shù)組占多少字節(jié),具體要看數(shù)組大小。它是“指向數(shù)組的指針”的簡(jiǎn)稱。

分辨方法:最簡(jiǎn)單的辨別方式就是看函數(shù)名前面的指針*號(hào)有沒有被括號(hào)()包含,如果被包含就是數(shù)組指針,反之則是指針數(shù)組。

首先,數(shù)組是一種固定大小的數(shù)據(jù)結(jié)構(gòu),它可以存儲(chǔ)一系列同類型的數(shù)據(jù)。數(shù)組的大小在聲明時(shí)就已經(jīng)確定,不能在運(yùn)行時(shí)改變。數(shù)組的元素可以通過下標(biāo)來訪問,下標(biāo)從0開始,最大下標(biāo)為數(shù)組大小減1。數(shù)組的元素在內(nèi)存中是連續(xù)存儲(chǔ)的,因此數(shù)組的訪問速度較快。數(shù)組的聲明方式為:類型 數(shù)組名[大小]。

其次,指針是一種變量,它存儲(chǔ)的是一個(gè)內(nèi)存地址。指針可以指向任何數(shù)據(jù)類型,包括數(shù)組。指針的大小與系統(tǒng)位數(shù)有關(guān),一般是4字節(jié)或8字節(jié)。指針的值可以被修改,指向不同的內(nèi)存地址。通過指針可以訪問其所指向的變量或數(shù)組元素。指針可以通過加減運(yùn)算來訪問它所指向的數(shù)組元素,但需要注意指針的類型,以及要訪問的數(shù)組元素的類型。指針的聲明方式為:類型 *指針變量名。

數(shù)組和指針在使用上還有一些區(qū)別。首先,數(shù)組名代表整個(gè)數(shù)組,可以用來初始化其他數(shù)組,但數(shù)組名不能被賦值或自增。其次,數(shù)組在函數(shù)調(diào)用時(shí),傳遞的是數(shù)組的地址,而不是整個(gè)數(shù)組。指針可以被賦值或自增。指針還可以用來動(dòng)態(tài)分配內(nèi)存空間,這是數(shù)組無法做到的。指針也可以用來實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)結(jié)構(gòu),如鏈表、樹等。

一、定義及聲明方式

數(shù)組

數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)固定大小的同類型元素集合。

數(shù)組的聲明方式為 type arrayName[size]; 例如:int myArray[5]; 表示一個(gè)包含5個(gè)整數(shù)的數(shù)組。

指針

指針是一個(gè)變量,其值為另一個(gè)變量的內(nèi)存地址。

指針的聲明方式為 type *pointerName; 例如:int *myPointer; 表示一個(gè)指向整數(shù)的指針。

二、內(nèi)存分配

數(shù)組

數(shù)組的內(nèi)存是連續(xù)分配的,即數(shù)組中的每個(gè)元素都按順序存儲(chǔ)在內(nèi)存中。

數(shù)組的大小在編譯時(shí)確定,不能在運(yùn)行時(shí)改變。

指針

指針本身只占用一定的內(nèi)存空間(通常是4或8字節(jié),取決于系統(tǒng)架構(gòu)),用于存儲(chǔ)其他變量的地址。

指針可以動(dòng)態(tài)地指向不同的內(nèi)存位置,這使得它更靈活,但也增加了出錯(cuò)的風(fēng)險(xiǎn)。

三、訪問方式

數(shù)組

通過索引訪問數(shù)組元素,例如:myArray[0] 表示訪問數(shù)組的第一個(gè)元素。

數(shù)組名在大多數(shù)情況下表示數(shù)組首元素的地址,但它是一個(gè)常量表達(dá)式,不能作為左值進(jìn)行賦值操作。

指針

通過解引用操作符 * 來訪問指針?biāo)赶虻闹担纾?myPointer 表示訪問指針 myPointer 所指向的整數(shù)。

可以通過指針?biāo)阈g(shù)運(yùn)算來訪問相鄰的內(nèi)存位置,例如:*(myPointer + 1) 表示訪問指針 myPointer 后面的下一個(gè)整數(shù)。

四、函數(shù)參數(shù)傳遞

數(shù)組

當(dāng)數(shù)組作為函數(shù)參數(shù)傳遞時(shí),實(shí)際上傳遞的是數(shù)組首元素的地址。因此,函數(shù)內(nèi)部對(duì)數(shù)組元素的修改會(huì)影響到原數(shù)組。

在函數(shù)參數(shù)中,通常不需要指定數(shù)組的大小,但在某些情況下為了代碼清晰和安全,會(huì)加上數(shù)組大小的信息(雖然這只是建議性的)。

指針

指針可以直接作為函數(shù)參數(shù)傳遞,允許函數(shù)直接操作指針?biāo)赶虻臄?shù)據(jù)。

函數(shù)可以通過指針參數(shù)返回多個(gè)值,或者修改調(diào)用者提供的數(shù)據(jù)。

五、生命周期和作用域

數(shù)組

數(shù)組的生命周期依賴于其聲明的位置和范圍。全局?jǐn)?shù)組在整個(gè)程序運(yùn)行期間都存在,而局部數(shù)組則在函數(shù)執(zhí)行完畢后銷毀。

數(shù)組的作用域也由其聲明的位置決定,可以是全局作用域或局部作用域。

指針

指針的生命周期和作用域同樣依賴于其聲明的位置和范圍。但是,指針可以指向不同生命周期和作用域的變量,這增加了其靈活性但也帶來了復(fù)雜性。

需要特別注意野指針(未初始化或已釋放但仍被使用的指針)和懸掛指針(指向已釋放內(nèi)存的指針)的問題。

(1)數(shù)組指針(行指針)

定義 int (*p)[n];

()優(yōu)先級(jí)高,首先說明p是一個(gè)指針,指向一個(gè)整型的一維數(shù)組,這個(gè)一維數(shù)組的長(zhǎng)度是n,也可以說是p的步長(zhǎng)。也就是說執(zhí)行p+1時(shí),p要跨過n個(gè)整型數(shù)據(jù)的長(zhǎng)度。

如要將二維數(shù)組賦給一指針,應(yīng)這樣賦值:

int a[3][4];

int (*p)[4]; //該語句是定義一個(gè)數(shù)組指針,指向含4個(gè)元素的一維數(shù)組。

p=a; //將該二維數(shù)組的首地址賦給p,也就是a[0]或&a[0][0]

p++; //該語句執(zhí)行過后,也就是p=p+1;p跨過行a[0][]指向了行a[1][]

所以數(shù)組指針也稱指向一維數(shù)組的指針,亦稱行指針。

(2)指針數(shù)組

定義 int *p[n];

[]優(yōu)先級(jí)高,[]先與p結(jié)合成為一個(gè)數(shù)組,再由int*說明這是一個(gè)整型指針數(shù)組,它有n個(gè)指針類型的數(shù)組元素。這里執(zhí)行p+1時(shí),則p指向下一個(gè)數(shù)組元素,錯(cuò)誤賦值方法:p=a;因?yàn)閜是個(gè)不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指針變量可以用來存放變量地址。但可以這樣 *p=a; 這里*p表示指針數(shù)組第一個(gè)元素的值,a的首地址的值。如要將二維數(shù)組賦給一指針數(shù)組:

int *p[3];

int a[3][4];

p++; //該語句表示p數(shù)組指向下一個(gè)數(shù)組元素。注:此數(shù)組每一個(gè)元素都是一個(gè)指針

for(i=0;i<3;i++)

p[i]=a[i]

這里int *p[3] 表示一個(gè)一維數(shù)組內(nèi)存放著三個(gè)指針變量,分別是p[0]、p[1]、p[2]所以要分別賦值。

數(shù)組指針只是一個(gè)指針變量,是C語言中專門用來指向二維數(shù)組的,它占有內(nèi)存中一個(gè)指針的存儲(chǔ)空間。指針數(shù)組是多個(gè)指針變量,以數(shù)組形式存在內(nèi)存當(dāng)中,占有多個(gè)指針的存儲(chǔ)空間。當(dāng)指針數(shù)組用來指向二維數(shù)組時(shí),其引用和用數(shù)組名引用都是一樣的。

比如要表示數(shù)組中i行j列一個(gè)元素:

*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]

2函數(shù)指針和指針函數(shù)的區(qū)別

最簡(jiǎn)單的辨別方式就是看函數(shù)名前面的指針*號(hào)有沒有被括號(hào)()包含,如果被包含就是函數(shù)指針,反之則是指針函數(shù)。

(1)指針函數(shù)

指帶指針的函數(shù),即本質(zhì)是一個(gè)函數(shù),函數(shù)返回類型是某一類型的指針。首先它是一個(gè)函數(shù),只不過這個(gè)函數(shù)的返回值是一個(gè)地址值。函數(shù)返回值必須用同類型的指針變量來接受,也就是說,指針函數(shù)一定有函數(shù)返回值,而且,在主調(diào)函數(shù)中,函數(shù)返回值必須賦給同類型的指針變量。

當(dāng)一個(gè)函數(shù)聲明其返回值為一個(gè)指針時(shí),實(shí)際上就是返回一個(gè)地址給調(diào)用函數(shù),以用于需要指針或地址的表達(dá)式中。

格式:

類型說明符 * 函數(shù)名(參數(shù))

由于返回的是一個(gè)地址,所以類型說明符一般都是int。

例如:

int *GetFlag();

int * lzq(int,int);

float *fun();

float *p;

p = fun(a);

(2)函數(shù)指針

指向函數(shù)的指針變量,即本質(zhì)是一個(gè)指針變量。

int (*f) (int x); /*聲明一個(gè)函數(shù)指針 */

f=func; /* 將func函數(shù)的首地址賦給指針f */

指向函數(shù)的指針包含了函數(shù)的地址的入口地址,可以通過它來調(diào)用函數(shù)。聲明格式如下:

類型說明符 (*函數(shù)名) (參數(shù))

其實(shí)這里不能稱為函數(shù)名,應(yīng)該叫做指針的變量名。這個(gè)特殊的指針指向一個(gè)返回整型值的函數(shù)。指針的聲明必須和它指向函數(shù)的聲明保持一致。

指針名和指針運(yùn)算符外面的括號(hào)改變了默認(rèn)的運(yùn)算符優(yōu)先級(jí)。如果沒有圓括號(hào),就變成了一個(gè)返回整型指針的函數(shù)的原型聲明。

例如:

void (*fptr)();

把函數(shù)的地址賦值給函數(shù)指針,可以采用下面兩種形式:

fptr=&Function;

fptr=Function;

取地址運(yùn)算符&不是必需的,因?yàn)閱螁我粋€(gè)函數(shù)標(biāo)識(shí)符就標(biāo)號(hào)表示了它的地址,如果是函數(shù)調(diào)用,還必須包含一個(gè)圓括號(hào)括起來的參數(shù)表。

可以采用如下兩種方式來通過指針調(diào)用函數(shù):

x=(*fptr)();

x=fptr()

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉