内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

大學生如何優(yōu)雅地使用c語言指針的n種方法-創(chuàng)新互聯

目錄

創(chuàng)新互聯公司專注于企業(yè)成都營銷網站建設、網站重做改版、圍場網站定制設計、自適應品牌網站建設、H5網站設計商城系統網站開發(fā)、集團公司官網建設、成都外貿網站建設公司、高端網站制作、響應式網頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為圍場等各大城市提供網站開發(fā)制作服務。

一.什么是指針

?

1.指針的概念

(1)指針的初始化

(2)?指針的大小

(3)指針的解引用

2指針的分類

(1)空指針

(2)野指針

(3)指針常量

(4)常量指針

(5)二級指針

二.指針的應用

1.函數傳參

(1)值傳遞

(2)地址傳遞?

2.函數傳返回值

三.指針的總結

1.指針的種類

2.指針的應用


一.什么是指針 ? ? ? ?

指針是c語言的精髓所在,如果不會比較優(yōu)雅地使用指針,也就不能說自己熟悉或者掌握c語言編程,正確且優(yōu)雅地使用,可以使程序更加簡潔高效,每一個學習c語言的小伙伴都應該學習并掌握指針。指針到底是如何成為c語言的靈魂呢,我們一起來探索指針的奧秘吧~

1.指針的概念

指針是一種數據類型,它存放的是數據變量的內存地址,定義指針的格式為?數據類型 *?指名,如int a=10;int*p=&a;這時候我們就說指針p指向了變量a,將變量a看成一個房間,房間的內容就是10,門牌號就是0x123456,則指針p存放的就是a房間的門牌號0x123456,示意圖如下圖所示

(1)指針的初始化

指針定義的時候可以初始化,初始化的格式為,數據類型 *?指針變量名=&變量名,如下圖所示

當指針指向數組的時候,由于數組變量名即為數組的首地址,故可以不用取地址符&

(2)?指針的大小

指針的在操作系統相同的情況,無論是int型char型還是字符型的類型等指針占用的內存大小都是一樣的

輸出結果

在64位windows操作系統下,幾種數據類型的指針都占用8個字節(jié)

(3)指針的解引用

當定義完一個指針并指向一個變量時,我們可以通過指針的解引用符*來間接訪問變量,即定義完指針后,*p就等價于變量a,而p為變量a的內存地址

輸出結果

再用數組來一個解引用的例子,在學習指針前,我們遍歷數組都是通過數組下標來訪問,而當我們接觸到了指針時,我們便可以利用指針來遍歷數組

輸出結果

2指針的分類 (1)空指針

? 當我們利用指針進行一些操作后,為了避免后面不小心對某些變量進行操作,我們往往會在操作完成后將指針置空,空指針即指針不指向任何一個內存空間,打印空指針將什么都不會輸出

(2)野指針

? 野指針的幾種產生情況

1.定義指針時未初始化,未初始化的指針指向的空間將是隨機的,如果此時操作野指針則可能產生一些未知的錯誤

輸出結果

????2.指針訪問越界

以訪問數組為例,當利用指針訪問的時候,p的指向一旦超過數組下標,則此時p存放的地址則為未知的空間地址,此時的指針p也稱之為野指針

輸出結果?

可以看到打印第7個變量時產生了一個隨機值,這就是因為野指針指向的空間是隨機的

? 3.指針釋放后未置空

?? ? 我們在利用指針進行操作完之后需要將指針釋放并置空,而部分小伙伴會在釋放指針后忘記將指針置空,釋放指針實質上是將指針指向的空間釋放,但是指針依然還在,此時指針指向的空間已經被釋放也就是已經不存在,則指針會指向另外的隨機空間,此時的指針也稱為野指針

(3)指針常量

當定義指針并初始化時,用const修飾的位置不同而決定是指針常量還是常量指針,int *?const p,此時的指針p則為指針常量,指針變量也是變量,此時指針常量意味著指針的值不可以修改,也就是指向不變,相當于和初始化指向的空間綁定了,指針常量的性質為指針不可修改,而指向的空間的值可以修改

對指針常量指向其他的變量,編譯器報錯并顯示指針變量為已讀,不可修改

(4)常量指針

? 當用const修飾整個定義表達式,cconst int *p,此時指針p為常量指針,即指針指向的空間的值為常量,不可修改,但是指針可以指向其他的空間

當常量指針指向的變量的值修改時,編譯器報錯并顯示變量a為已讀,不可修改

(5)二級指針

?指針不僅可以指向其他數據類型的變量,指針也可以指向指針,指向指針的指針稱為二級指針,此時指針存放的是一級指針變量的地址,二級指針可以通過兩次解引用訪問變量

輸出結果為

可以看到輸出結果第一行為一級指針解引用后的值,即變量a的值;第二行為二級指針一次解引用的值,即為一級指針的值,一級指針的值即為變量a的地址;第三行為二級指針二次解引用的值,即為變量a的值?

二.指針的應用 1.函數傳參 (1)值傳遞

?函數的形參為普通變量時即為值傳遞,此時將實參傳入函數將不會修改,我們以交換兩個變量的值為例

可以看到在函數內兩個變量的值交換了,但是調用完函數后兩個變量的值并沒有交換

(2)地址傳遞?

?函數的形參為指針變量時即為值傳遞,此時傳入實參必須傳入實參的地址,即需要取地址符&,傳入實參的地址后,在函數對形參修改將會使實參也發(fā)生相應的修改,我們以交換兩個變量的值為例

可以看到在函數內兩個變量的值交換了,調用完函數后兩個變量的值也會相應地交換

2.函數傳返回值

?在學習指針之前,我們利用函數傳返回值時只能傳遞一個值,在學到指針的時候,我們便可以在傳返回值時利用指針傳遞多個返回值,當我們某個函數的形參為數組,且返回值也為數組時,我們可以利用指針作形參和返回值,我們以冒泡排序為例,傳入任意一個數組,然后返回排序后的數組

#includeint * BubbleSort(int *a) //用指針作為形參,傳入的是數組首元素的地址
{
	int i=0;
	int j=0;
    //冒泡排序
	for(i=0;i<5;i++)
	{
		for(j=0;j<5-i-1;j++)
		{
			if(a[j]>a[j+1])
			{
				int temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}
    //排序完傳回指針
	return a;
}
int main()
{	
	int a[5]={5,9,1,5,7};
	int i=0;
	int *p=BubbleSort(a);//調用完函數定義一個指針接受返回值
	for(i=0;i<5;i++)
    打印調用完冒泡排序的數組
	{
		printf("%d\n",*p);
		p++;
	}
		
   	return 0;
}

輸出結果為

可以看到,將數組名傳入冒泡排序函數后數組的元素進行了排序

三.指針的總結 1.指針的種類

? 指針總體可以分為空指針、野指針、指針常量、常量指針、二級指針(多級指針),在學習指針是我們要盡量避免空指針和野指針,以免引起一些未知的錯誤,根據使用場景合適地選擇指針種類,可以有效地提高程序的簡潔性和可讀性

2.指針的應用

? 指針的應用最常用的兩個功能就是函數傳參和函數傳返回值

? 在我們想要在函數內修改實參時可以使用指針傳參,不過指針傳參不可濫用,防止在不需要修改實參時意外對實參進行改動

?在我們想要函數傳回數組、結構體等多個變量值時我們可以將指向它們的指針作為返回值,在主函數調用函數后定義指針接受即可

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

網站名稱:大學生如何優(yōu)雅地使用c語言指針的n種方法-創(chuàng)新互聯
當前鏈接:http://www.rwnh.cn/article42/dosgec.html

成都網站建設公司_創(chuàng)新互聯,為您提供自適應網站、外貿網站建設、小程序開發(fā)、網站收錄、全網營銷推廣關鍵詞優(yōu)化

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

h5響應式網站建設
义乌市| 石柱| 泸西县| 汪清县| 拜泉县| 台山市| 信丰县| 平谷区| 工布江达县| 徐州市| 西盟| 吉水县| 丰都县| 上蔡县| 泰安市| 宜君县| 托克托县| 武功县| 萍乡市| 开封市| 枣庄市| 厦门市| 眉山市| 平和县| 泸西县| 泰来县| 贵州省| 伊吾县| 元阳县| 浮山县| 黔南| 资中县| 民勤县| 阿拉尔市| 称多县| 汤原县| 建宁县| 娱乐| 蓝山县| 顺义区| 南陵县|