C語言-指針

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

1 指針的定義

指針:是指變量的地址
指針變量:存儲某一個變量的地址的變量
一般形式為:
類型說明符 *變量名;

注釋:
1.*表示是一個指針變量,變量名即定義的指針變量名,類型數據說明符表示本指針變量所指向的變量的數據類型。
2.一個指針變量只能指向同類型的變量,不能時而指向一個浮點型變量,時而指向一個整型變量。

例如:
int *p; //先算*號,代表p是一個指針變量,int代表將來存儲int類型變量的地址int a;p=&a;// 或者這樣定義int *p=&a;

注意:同時定義多個指針變量的正確寫法:int p,q;

2 指針的引用

1.關系運算符
*:指針運算符(又稱“間接訪問”運算符)。
&:取地址運算符。

// 案例1:指針變量的初始化
int a=8;
int *p=&a;
*p=9;
printf ("a=%d\n",a);
// 案例2:指針變量的賦值
int a;
int *p;
p=&a;  
// 注釋:1.將p=&a寫為*p=&a是錯誤的;1.指針變量不能被賦予一個數值。

3 指針變量作為函數參數

函數的參數不僅可以為整型、浮點型、字符型等數據,還可以是指針類型。它的主要作用是將一個地址的變量的傳遞給另一個函數。

// 練習1:輸入兩個整數,以大小順序輸出。
#include<stdio.h>
void swap(int *p1,int *q1)  // 用兩個指針接收p和q傳輸來的地址信息
{
    int temp;    // 新建一個中間變量
    temp=*p1;    // 將*p1中的數值賦給temp
    *p1=*q1;     // 將*q1中的值賦給*p1
    *q1=temp;   // 將temp中存儲的值賦給*q1
}
int main()
{
    int a,b;   // 定義a,b兩個變量
    int *p,*q;  // 定義p,q兩個指針
    if (a>b)   //判斷a是否大于b,若大于則執行下面的語句,將a,b進行交換
    {
        swap(p,q);  // swap是我們自己定義的交換函數,在先執行main()函數
    }
    printf("%d%d\n",a,b);
    
}

4 指針變量的運算

1.賦值運算
前文已經說明。
2.加減算術運算符
對于指向數組的指針變量,可以減上或加上一個整數n,設pa是指向數組a的指針變量,則pa+n,pa-n,pa++,pa--,++pa,--pa的運算都是合法的。指針變量加或減一個整數n的意義是把指針指向的當前位置(指向某個數組元素)向后或向前移動n個位置。應注意數組指針變量向前或向后移動一個位置和它們的地址加1或減1是不相同的。因為數組可以有不同的類型,各種類型的數組元素所占的字節長度是不相同的。如指針變量加1,即向后移動1個位置表示指針變量指向下一個數據元素的首地址。而不是在原地址的基礎上加1。例如:

int a[5],*pa;
pa=a;  // *pa指向數組a,也是指向a[0]
pa=pa+2; //*pa指向a[2],即pa的值為&pa[2]
  1. 兩個指針變量之間的運算
    定義:只有指向同一數組的兩個指針變量之間才能進行運算,否則運算毫無意義。
    1)兩指針變量相減:兩指針變量相減所得之差是兩個指針所指元素之間相差的元素個數。
    2)兩指針變量進行關系運算:指向同一數組的兩指針變量進行關系運算可以表示他們所指數組元素之間的關系。
pf1==pf2;   // 表示pf1和pf2指向同一數組元素
pf1>pf2;   // 表示pf1處于高地址位置
pf1<pf2;   // 表示pf1處于低地址位置

5 const的用法

  1. const與數值的關系
    const:表示該變量不可更改,只能讀取里面的值。
const int a=8; //表示a的值為8,在函數運行中是不可更改的,且只有在定義變量時賦值
  1. const與指針的關系
    1.const int *p或者int const *p
int a=7;
const int *p=&a; // int const *p=&a;
*p=8;
// 注釋:指針所對應的存儲單元為改變,不能通過p去修改a里面的值;若修改a里面的值,只能用a本身來
//進行修改

2.int * const p

int a=9,b;
int *const p=&a;
*p=&b;
// 注釋:*const p代表p里面存儲的信息只能讀取不能修改。

3.const int *const p
代表p里面所儲存的信息只能讀取,不能改變。也不能通過p里面的信息修改相對性的存儲單元內的值。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,860評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,128評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,025評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,421評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,642評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,177評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,970評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,157評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,410評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,896評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,157評論 2 375

推薦閱讀更多精彩內容

  • 指針是C語言中廣泛使用的一種數據類型。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數據結構; ...
    朱森閱讀 3,464評論 3 44
  • 1.語言中變量的實質 要理解C指針,我認為一定要理解C中“變量”的存儲實質, 所以我就從“變量”這個東西開始講起吧...
    金巴多閱讀 1,801評論 0 9
  • 前言:指針是 C語言一個重要概念,也是C 語言的一個重要特色。使程序簡潔、緊湊、高效。指針乃是C之精華。 數據在內...
    瀟湘候晨雪閱讀 776評論 0 0
  • 前言 最近真的是忙的不可開交,公司一直給安排任務,連學習和寫筆記的時間都沒有了,落下好幾次課的筆記都沒有寫,所以我...
    Xiho丶閱讀 1,538評論 1 12
  • 計算機中所有的數據都必須放在內存中,不同類型的數據占用的字節數不一樣,例如 int 占用4個字節,char 占用1...
    飯飯男閱讀 732評論 0 4