指針
彙編語言:都是直接操作地址去訪問內存單元裡面等內容。
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++的小夥伴可以加入學習。最後祝所有程序員都能夠走上人生巔峰,讓代碼將夢想照進現實,非常適合新手學習,有不懂的問題可以隨時問我,工作不忙的時候希望可以給大家解惑。
閱讀更多 往事C語言 的文章