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

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

C語(yǔ)言—淺析指針-創(chuàng)新互聯(lián)

目錄

隆回網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)從2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)

指針

一、什么叫做指針?

二、指針的類型

1.一級(jí)指針

2.二級(jí)指針

? 3.數(shù)組指針

4.函數(shù)指針

? 5.野指針

三、指針的運(yùn)算

? 1.指針的賦值

? 2.指針的移動(dòng)

3.指針-指針


指針 一、什么叫做指針?

指針是用來(lái)存放內(nèi)存地址的變量,可以簡(jiǎn)單的理解為,指針就是地址,平時(shí)所說(shuō)的指針通常都是說(shuō)的指針變量。

? 舉個(gè)例子,定義一個(gè)整形變量并初始化:

int a = 20;
int *p = &a;

此時(shí)我們就說(shuō)指針變量p指向了a內(nèi)存的地址,如果通過(guò)解引用(*)操作,則會(huì)得出這塊內(nèi)存中存儲(chǔ)的值為20,這里要注意區(qū)分內(nèi)存地址和內(nèi)存儲(chǔ)存了什么是兩塊不同的空間,地址在32位機(jī)器上只占4個(gè)字節(jié),在64位機(jī)器上占8個(gè)字節(jié)。

? 和其他變量一樣,指針也可以進(jìn)行初始化,初始化如下:

int *p = NULL;
二、指針的類型

?指針大致可以分為以下幾種類型:

1.一級(jí)指針

? 一級(jí)指針就是我們常見(jiàn)的普通指針,例如上述的一個(gè)定義指針的例子,就是一個(gè)一級(jí)指針,除了int型的一級(jí)指針之外,還有其他常見(jiàn)的一級(jí)指針。

char ?*pc = NULL;
int ? *pi = NULL;
short *ps = NULL;
long ?*pl = NULL;
float *pf = NULL;
double *pd = NULL;
2.二級(jí)指針

? 二級(jí)指針指的是指向一級(jí)指針的指針,里面存儲(chǔ)的是一級(jí)指針的地址,通過(guò)*解引用操作可以找到一級(jí)指針中存放的內(nèi)容,二次解引用**可以找到一級(jí)指針指向的地址的內(nèi)容,如下,便是一個(gè)二級(jí)指針,輸出為10

int a = 10;
int *p = &a;
int **pa = &p;
printf("%d",**pa);
? 3.數(shù)組指針

? 數(shù)組指針,就是指向數(shù)組的指針,里面存放的是一維數(shù)組的地址其中一種形式如下:

int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int(*p)[10] = arr;

? 我們就說(shuō)*p是一個(gè)數(shù)組指針,指向的數(shù)組擁有十個(gè)元素,每個(gè)元素類型是int類型,這里需要注意的是,如果寫成int *p[10] = arr(去掉括號(hào)),則會(huì)變成一個(gè)指針數(shù)組而不是數(shù)組指針,因?yàn)閇 ]的優(yōu)先級(jí)高于*,所以p先和右邊的[ ]相結(jié)合了

4.函數(shù)指針

? 該指針指向的是一個(gè)函數(shù)的地址,如下便是一個(gè)函數(shù)指針為:

void (*p)();
? 5.野指針

? 概念:野指針是指指針指向的內(nèi)存地址是未知的(隨機(jī)、不正確、沒(méi)有明確限制的都算未知)

? 既然知道了什么是野指針,那么有哪些操作容易產(chǎn)生野指針呢?

? 1.對(duì)指針定義時(shí)未進(jìn)行初始化,指針變量剛被創(chuàng)建時(shí)不會(huì)自動(dòng)成為NULL指針,它的缺省值是隨機(jī)的,它所指的空間是隨機(jī)的。

int main()
{
	int * p;
	*p = 10;
	return 0;
}

? 2.指針越界訪問(wèn):指針指向的范圍超出了合理范圍,或者調(diào)用函數(shù)時(shí)返回指向棧內(nèi)存的指針或引用,因?yàn)闂?nèi)存在函數(shù)結(jié)束時(shí)會(huì)被釋放。

int main()
{
	int arr[10] = {0};
	int *p = arr;
	for(int i = 0; i<= 11; i++)
	{
		*(P++) = i;//當(dāng)i=11時(shí),指針指向的范圍超出數(shù)組arr的范圍,p變成野指針。
	}
	return 0;
}

? 3.指針釋放后未置空:有時(shí)指針在free或delete后未賦值 NULL,便會(huì)使人以為是合法的。其實(shí)它們只是把指針?biāo)傅膬?nèi)存給釋放掉,但并沒(méi)有把指針本身忘記。此時(shí)指針指向的就是無(wú)效內(nèi)存。

int main()
{
	int *p = NULL;
	p = malloc(10 * sizeof(int));//malloc函數(shù)為開(kāi)辟內(nèi)存
	if (!p)
	{
		return;
	}
	
	free(p);//釋放了內(nèi)存,故要馬上給p賦值為空指針NULL
	p = NULL;
	return 0;
}

所以要避免成為野指針,就應(yīng)當(dāng)盡量多的避免上述三種操作

三、指針的運(yùn)算 ? ? ? ? 1.指針的賦值

指針的賦值通常有如下形式:

指針變量=&變量
指針變量=指針變量
指針變量=NULL

? 2.指針的移動(dòng)

? 指針的移動(dòng)通常為指針±整數(shù),在下面的例子中,每一次循環(huán),指針p將跳到下一個(gè)地址,因?yàn)檫@里是int類型的數(shù)組,所以將跳過(guò)四個(gè)字節(jié)(關(guān)于指針移動(dòng)到底跳過(guò)多少個(gè)字節(jié),筆者會(huì)在之后再做總結(jié),這里不在敘述)

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = arr;
	for (int i = 0; i< 10; i++)
	{
		p = p + 1;
		printf("%p\n", p);
	}
	return 0;
}
3.指針-指針

? 得到的是指針之間的元素個(gè)數(shù)

最后,這是筆者的第一篇博客,水平有限,如有解析不到之處請(qǐng)各位多多批評(píng)指正

你是否還在尋找穩(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)查看詳情吧


網(wǎng)站標(biāo)題:C語(yǔ)言—淺析指針-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://weahome.cn/article/dechcd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部