怎麼理解C語言中的指針,如何運用?


C語言指針該怎麼理解這個問題,真的是有1000個人能給出1000個答案。我覺得,在這裡我可以給出我理解並整理的一個答案。

對於C語言指針,我認為可以從“兩己三他”的維度來理解。所謂的“兩己三他”,展開來說,就是“己址,己值,他址,他值,他型”。詳細論述,建議題主知乎上搜索我寫的一個文:從5個維度來看C語言指針(指針就是個紙老虎)。

大概來說:

  1. 己址:就是自己的地址的意思。就是指針變量也有自己的地址;
  2. 己值:就是自己的數據值的意思。就是指針變量也有自己的數據值;
  3. 他址:就是他人的地址的意思。指針變量的己值,其實就是他人的地址;
  4. 他值;就是他人的數據值的意思。指針變量的己值是他人的地址,那麼就可以通過指針變量獲取到他人的數據值;
  5. 他型:就是他人的類型。你以為聲明指針變量時的類型,是指指針嗎?你錯啦!

我這裡寫一段C語言代碼,大概解釋下“兩己三他”的意思。



C程序也很簡單,裡面有一些關於指針常見的C語言代碼寫法。

pInt = ¶;這條語句的本質,其實就將變量para的地址給了指針pInt的己值。

printf("%x \\n\

C語言編程答疑


恰好我之前寫了一系列介紹 C 語言的文章,介紹了什麼是指針,以及為什麼要使用指針,下面摘錄一部分,感興趣的話,可以點我瞭解更多。


什麼是 C語言指針?


不同的數據類型的主要區別在於佔用的存儲空間不同。我們知道,C 程序是運行在計算機的內存中的,因此 C 程序的變量也是存在於內存中的。C 標準規定 char 類型佔用一個字節的存儲空間,對其他整型卻沒有做規定,現在為了解釋的方便,我們假設 int 類型的數據佔用內存 4 個字節。

假設我們如下定義了兩個變量:

signed char i = 3;int j = 8;

那麼,i 佔用了 1 字節的內存空間,j 佔用了 4 字節的內存空間,請看下圖。

方框表示內存空間,內部表示存儲的值。我們把內存逐字節編號,方框外部的數字表示方框的編號(這樣的內存“編號”即所謂的“內存地址”)。修改變量 i 的值,實際上就是修改地址為 4000 的內存空間裡的值。那反過來呢?如果我修改了地址為 4000 的內存空間裡的值,i 的值會相應改變嗎?答案是肯定的,請繼續往下看。

上圖中的內存地址“4000”是我為了解釋方便隨意取的。那麼,在實際應用中,變量 i 的地址如何獲取呢?C 語言提供了“&”運算符,就是獲取變量地址的。請看下面的例子:

#include <stdio.h>
int main()
{
signed char i = 3;
int j = 8;
long p1 = (long)&i;
printf("p1: %ld \

嵌入式時代


C語言指針是C語言中最基礎同時也是難點之一,很多學習過C語言的都知道指針,最基本的用法也都知道,但是深入學習C語言就知道指針是C語言的靈魂,難點就是了解指針全面用法,以及指針和指針變量的關係。

C語言指針本身難度並不大,最讓人頭痛的是它的繁瑣。C 語言最顯著的特點,就是因為它裡面有指針。

要了解指針以及指針的運行,首先我們先了解數據保存過程的與我們如何讀取保存過數據的內容。

我們都知道內存單元是字節,在程序中定義某個變量之後,當系統對其進行編譯時就會分配到內存單元字節,每個單元自己都有自己的編號,當然就會有給它一定長度的空間,也就是地址。

由於我們可以通過地址能找到變量單元,也可以說該地址“指向”該變量單元,所以在C語言中,地址就稱為“指針”,明白一點就是通過“地址”能找到對應的內存單元,每個變量地址都對應一個變量指針。

至於如何運行,上面也說了指針的作用就是存儲地址值,即操作內存。



Software科技言


指針是一種的變量的類型,這種變量存儲的值是一個內存地址。

在C語言中,每定義一個變量,編譯器都會為其分配變量類型對應大小的內存,內存的起始地址就是變量的地址,內存存儲的內容就是變量的值。

int i; //編譯器為變量名為i的變量分配了內存。

通過變量名,我們可以讀寫變量的值。

i=10;//寫入數值10到名為i的變量。

printf("%d\

計算機軟件知識


1 內存是個大樓,樓中有許多房間,每個房間只住八個0或者1;

2 每個房間都有門牌號,這個號從零號開始,最大就看內存條大小了,這個門牌號就是地址;

3 內存中存儲數字的房間可以分為兩種,一種是存儲普通的數字,一種存儲其他房間的門牌號(地址),存儲其他房間門牌號的房子,就是指針,這些房間在C語言上都稱為變量;

4 任何一個變量都有地址,如同所有房間都有門牌號,可以通過:

&變量

來獲得這個變量的存儲地址,保留的話只能存進指針變量中去。

5 可以通過*運算,按一個指針變量中存儲的地址、取出那個地址中存儲的數。

簡單描述,更多內容好好看教材。


素食的貓


看看我新發布的視頻,也許指針不再難了。


IT老者


首先需要理解所有的變量都是放在內存裡的,當然也有一些是寄存器變量暫時可以忽略。而指針則是指向某一個內存地址的一個變量。指針可以指向字符,整形,函數,結構等各種類型的數據。而指針變量本身就是需要分配內存。我們公司是做嵌入式的代碼裡指針是非常普遍的,模塊句柄,動態內存分配,模塊交互的結構體裡面也會很多函數指針等等。總而言之指針是c語言的核心,還有不懂的可以關注我私信哦


程序員T哥


寫一寫彙編語言,就會明白,指針就是間接尋址!



sharpxcb


我就是在頭條理解指針,不同的人不同理解,都參考下,我本來是用FLash AS3研究中國象棋人機對戰,遇到算法來學C,終於入坑了


西瓜61912


別把指針特殊化,把它想的和其他普通變量一樣,只不過別的變量裡存的是數字或字符串,它裡面存的是內存地址,這個內存地址指向一塊內存區域,裡面存的是值,當然可能是數字或字符串,或者又是一個指針。在學習時,千萬別把它特殊化看待,甚至妖魔化了,否則就會轉不過彎來。

/<stdio.h>


分享到:


相關文章: