C/C++中的指針(小白都懂)

斜體樣式學習C語言一個很重要的事情就是指針和內存管理,但是對於很多人來說這恰恰是最難的部分,我在幾個月的折騰後終於搞清楚了一點。接下來就指針和數組發表一下我的看法。
指針最常見的就是 * 和 & 這兩個而且這兩個都是對內存進行操作的,所以初學者可能會對此產生疑惑,剛開始我也是分不清這兩個到底什麼關係。

在這裏先聲明一下,C語言的函數傳遞方式是傳值,簡單來說就是程序內部傳遞的是一個數值,這個數值可以是字符可以是字符串還可以是數字,因爲字符是以ASCII碼值存儲的。指針變量和普通變量有什麼區別呢?其實我認爲是一種直接和間接的區別,C/C++可以直接操作計算機內存,因此可以充分發揮計算機的性能,也因此在一些運行效率比較高的地方運用的比較多,比如很多大型遊戲就是用C++進行開發的,因此C/C++的核心就是指針和引用(C++中的,後面再講)。因此對於指針變量和普通變量,函數間進行通信的時候還是按照值來傳遞,普通變量先找到參數再找內存,傳遞的時候先轉化爲指針,再轉化爲具體值,相當於進行了多餘的操作,而且對於結構體來說,可能修改變量值並不能修改內存的值,所以出現一些結構體的值無法修改的情況。但是對於指針來說直接尋找內存,並且對內存進行操作,可以直接修改內存的值。

但是內存只是一個用來儲存變量的地址,並不能進行數值的一些計算,因此如果要進行運算,必須轉化爲普通變量,這裏就要用到 * 號,它可以將變量的地址轉化爲一個可以運算的值,因此可以進行正常的操作,而 & 則相反,它可以找到這個變量在計算機中的地址,這兩個是相反的操作,接下來我用一段代碼來演示。

    int* p;
	p = new(int);
	*p = 1;
	cout << p << endl;
	cout << *p << endl;

結果輸出爲000001D7483A5E00
1
由此可見 p 實際上爲一個地址,儲存1的地址。
而 *p進行將p的地址轉化爲一個可以參與運算的量

	int p = 1;
	cout << p << endl;
	cout << &p << endl;

而輸入這個後輸出爲
1
0000001E8FCFF624
可以看出p是1;
但是計算機中儲存p是以地址來儲存的在此例中爲0000001E8FCFF624

綜上所述,* 和 &只是對地址進行運算的符號,一個解開地址得到值,另一個解開值得到地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章