C語言難點?指針原來這麼簡單

指針

彙編語言:都是直接操作地址去訪問內存單元裡面等內容。

C語言作為高級語言:提供通過地言:都是地址訪問內存單元的內容。

1、什麼叫做地址?

地址就是內存中對每一個字節的編號。

通常一個數據的地址指的是存放這個數據的地址段的首地址。

注意:

1、一個程序在運行是會自動為變量開闢新的內存,地址會變。

2、在同一次運行過程中變量的地址是不會變的。

3、數據段,一個程序是在一個數據段中進行的。

&(取地址運算符):單目運算符,返回一個變量的地址

*(指針運算符):單目運算符,返回的是一個地址裡面的變量的數據。

&和*具有相同的優先級,自右向左結合。

什麼是指針?

指針是C語言中廣泛使用的一種數據類型。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數據結構; 能很方便地使用數組和字符串; 並能象彙編語言一樣處理內存地址,從而編出精練而高效的程序。指針極大地豐富了C語言的功能。 學習指針是學習C語言中最重要的一環, 能否正確理解和使用指針是我們是否掌握C語言的一個標誌。同時, 指針也是C語言中最為困難的一部分,在學習中除了要正確理解基本概念,還必須要多編程,上機調試。只要作到這些,指針也是不難掌握的。

指針變量的類型說明

對指針變量的類型說明包括三個內容:

(1)指針類型說明,即定義變量為一個指針變量;

(2)指針變量名;

(3)變量值(指針)所指向的變量的數據類型。

其一般形式為: 類型說明符 *變量名;

其中,*表示這是一個指針變量,變量名即為定義的指針變量名,類型說明符表示本指針變量所指向的變量的數據類型。

例如: int *p1;表示p1是一個指針變量,它的值是某個整型變量的地址。 或者說p1指向一個整型變量。至於p1究竟指向哪一個整型變量, 應由向p1賦予的地址來決定。

再如:

staic int *p2; /*p2是指向靜態整型變量的指針變量*/

float *p3; /*p3是指向浮點變量的指針變量*/

char *p4; /*p4是指向字符變量的指針變量*/ 應該注意的是,一個指針變量只能指向同類型的變量,如P3 只能指向浮點變量,不能時而指向一個浮點變量, 時而又指向一個字符變量。

指針變量的賦值

指針變量同普通變量一樣,使用之前不僅要定義說明, 而且必須賦予具體的值。未經賦值的指針變量不能使用, 否則將造成系統混亂,甚至死機。指針變量的賦值只能賦予地址, 決不能賦予任何其它數據,否則將引起錯誤。在C語言中, 變量的地址是由編譯系統分配的,對用戶完全透明,用戶不知道變量的具體地址。 C語言中提供了地址運算符&來表示變量的地址。其一般形式為: & 變量名; 如&a變示變量a的地址,&b表示變量b的地址。 變量本身必須預先說明。設有指向整型變量的指針變量p,如要把整型變量a 的地址賦予p可以有以下兩種方式:

(1)指針變量初始化的方法 int a;

int *p=&a;

(2)賦值語句的方法 int a;

int *p;

p=&a;

不允許把一個數賦予指針變量,故下面的賦值是錯誤的: int *p;p=1000; 被賦值的指針變量前不能再加“*”說明符,如寫為*p=&a 也是錯誤的

學習路線:

1、c語言入門 程序設計-算法-運算符-順序 分支 循環結構。

2、C語言精通 數組-函數字串符-指針-構造類型-預處理-存儲管理-文件操作-數據結構。

3、c++入門 面對對象編程-類和對象-運算符重載-派生於繼承,異常處理技術-C++語言標準-數據結構-(雙向鏈表-雙向隊列-樹-圖)。

4、c++精通-stl標準模板庫(容器-迭代器-算法)正則表達式-boost標準模板庫-socket網絡編程-大型企業項目實戰:-員工信息管理系統-推箱子-俄羅斯方塊-服務器-播放器-人工智能。

5、windows高級工程師:win32/mfc-windows高級編程-QT框架編程-大型企業級項目實戰項目(人臉識別-車牌識別-局域網遠程監控-等項目)

6、linux系統應用程序開發-linux內核構架研究-linux頂級網絡服務器開發及搭建。

7、大型企業項目實戰(linux內核高級虛擬內存驅動設計-linux網絡間諜系統軟件-linux內核網絡數據劫持-linux網絡閱讀系統開發

文章最後

每天晚上20:00我都會開直播給大家分享C/C++遊戲編程學習知識和路線方法,群裡會不定期更新最新的教程和學習方法,大家都是學習C/C++的,或是轉行,或是大學生,還有工作中想提升自己能力的前端黨,如果你是正在學習C/C++的小夥伴可以加入學習。最後祝所有程序員都能夠走上人生巔峰,讓代碼將夢想照進現實,非常適合新手學習,有不懂的問題可以隨時問我,工作不忙的時候希望可以給大家解惑。