指針是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)兩指針變量相減:兩指針變量相減所得之差是兩個指針所指元素之間相差的元素個數。
2)兩指針變量進行關系運算:指向同一數組的兩指針變量進行關系運算可以表示他們所指數組元素之間的關系。
pf1==pf2; // 表示pf1和pf2指向同一數組元素
pf1>pf2; // 表示pf1處于高地址位置
pf1<pf2; // 表示pf1處于低地址位置
5 const的用法
- const與數值的關系
const:表示該變量不可更改,只能讀取里面的值。
const int a=8; //表示a的值為8,在函數運行中是不可更改的,且只有在定義變量時賦值
- 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里面的信息修改相對性的存儲單元內的值。