C語言/C+編程學習之指針訪問詳解,10分鐘學會,超詳細!

C語言面向過程編程的語言;C++面向對象編程的語言。

兩者有本質的區(qū)別,其實是完全不同的兩種語言,只不過C++兼容C語言而已。

其中C++則一般看作是對C語言的擴展。因為C語言沒有面向對象的語法結構,而當時業(yè)界又迫切需要面向對象的編程特性,所以貝爾實驗室的開發(fā)者就為C語言添加了面向對象的結構?,F(xiàn)在C++已經(jīng)不只是C語言的擴展了,它已經(jīng)完全可以被看作一種新的編程語言。雖然C語言的特性以及庫函數(shù)仍然被C++支持,不過C++擁有自己的獨立的類庫體系,功能相當強大。

C/C++的優(yōu)點在于與底層比較接近,可以控制的粒度更加精細,是開發(fā)系統(tǒng)級應用的最佳選擇。關于跨平臺,C/C++也是很好的語言,因為所有平臺都支持,不同的是,不同平臺支持的實現(xiàn)不同,類庫不同,要編寫跨平臺的程序,需要選擇跨平臺的類庫,如標準類庫,如果標準類庫的支持不夠也只需要附加編寫一個跨平臺的支持類庫。

C_指針

內存區(qū)的每一個字節(jié)都有一個編號這就是地址,如果在程序中定義了一個變量沒在對程序進行編譯時,系統(tǒng)就會給這個變量分配內存單元。

C語言中對于變量的訪問有兩種方式,分別是直接訪問和間接訪問

直接訪問和間接訪問

直接訪問比如 a=5;

系統(tǒng)在編譯時,已經(jīng)對變量分配了地址,例如,若變量a分配的地址是2000,則該語句的作用就是把常數(shù)5保存到地址為2000的單元中

間接訪問比如:scanf(“%d”,&a);

調用函數(shù)時,把變量a的地址傳遞給函數(shù)scanf,函數(shù)首先把該地址保存到一個單元中,然后把從鍵盤接收的數(shù)據(jù)通過所存儲的地址保存到a變量中

初始指針

在C語言中,指針是一種特殊的變量,它是存放地址的。假設我們定義了一個指針變量·int*i_pointer 用來存放整型變量 i 的地址??梢酝ㄟ^語句:i_pointer=&i;

初始兩個操作符 *和&

*:這個玩意叫做取值操作符

&:這個玩意叫做取址操作符

如果已執(zhí)行了語句 pointer_1=&a;

(1)&* pointer_1的含義是什么?

“&”和“ * ”兩個運算符的優(yōu)先級別相同,但按自右而左方向結合,因此先進行*pointer_1的運算,它就是變量a,再執(zhí)行&運算。小編推薦一個學C語言/C++的學習裙【 六二七,零一二,四六四 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發(fā)工具,很多干貨和技術資料分享!

因此,&* pointer_1與&a相同,即變量a的地址

如果有: pointer_2 =&* pointer_1;

它的作用是將&a(a的地址)賦給pointer_2 ,如果pointer_2 原來指向b,經(jīng)過重新賦值后它已不再指向b了,而指向了a

(2) *&a的含義是什么?

(3) (*pointer_1)++相當于a++。

注意括號是必要的,如果沒有括號,就成為了*pointer_1++,從附錄可知:++和 * 為同一優(yōu)先級別,而結合方向為自右而左,因此它相當于*(pointer_1++)。

由于++在pointer_1的右側,是“后加”,因此先對pointer_1的原值進行*運算,得到a的值,然后使pointer_1的值改變,這樣pointer_1不再指向a了。

指針和指針變量

知道了一個變量的地址,就可以通過這個地址來訪問這個變量,因此,又把變量的地址稱為該變量的“指針”

C語言中可以定義一類特殊的變量,這些變量專門用來存放變量的地址,稱為指針變量

注意指針變量中存放的值是地址(即指針)。注意區(qū)分指針和指針變量

定義一個指針變量

float *pointer_3/ / pointer__3是指向float型變量的指針變量,小編推薦一個學C語言/C++的學習裙【 六二七,零一二,四六四 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發(fā)工具,很多干貨和技術資料分享!

可以用賦值語句使一個指針變量指向另外一個變量的地址,從而使它指向該變量

指針變量前面的“*”,表示該變量的類型為指針型變量。其一般的形式為:

類型說明符 *變量名

類型說明符表示本指針變量所指向的變量的數(shù)據(jù)類型

需要特別注意的是,只有整型變量的地址才能放到指向整型變量的指針變量中。下面的賦值是錯誤的∶

最后我來說一說了解C的必要性:

1. 對內存和硬件的操作,是目前絕大部分高級語言所隱藏的,只有堅實C背景的同學,才可以考慮的更多,如果你想對原理有更多的了解,那么C其實是不可繞過的一個環(huán)節(jié)。

2. 想要締造一個新的系統(tǒng)和語言,沒有C是不行滴(或許C++勉強)。

3. 不管是OC的消息系統(tǒng),Java的自動回收,Ruby的動態(tài)類擴充,這些花哨且時髦的東西,其實都可以用C來實現(xiàn),而且很多都是用C來實現(xiàn)的,如果你想自己實施,看C吧。

4. 破解和分析程序,C可以起到很大的作用。C是可以人為創(chuàng)建Bug來破壞一個系統(tǒng)滴。

最后我引用我的一個大牛朋友的話:“請不要忽視C語言,它上可九天摘月,下可五洋捉鱉”。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容