關(guān)于指針,以前學(xué)習(xí)的時候就感覺很模糊,有種似懂非懂的感覺。現(xiàn)在又學(xué)了一遍,對于 其中的一些概念了解的比以前清楚了,但說到怎么去用還是不太了解,還是需要大量的去練習(xí)。
廢話也不多說了,還是把今天的學(xué)習(xí)內(nèi)容整理一下。以后有什么問題,也可以來查找。
首先得腦袋里裝著幾個問題來學(xué)習(xí)指針。
1、地址指針的概念
- 變量的指針和指向變量的指針
- 定義一個指針變量
- 指針變量的引用
2、指針變量做函數(shù)參數(shù)
3、數(shù)組指針和指向數(shù)組的指針變量 - 指向數(shù)組元素的指針
- 通過指針引用數(shù)組元素
- 指向多維數(shù)組的指針和指針變量
指針的概念
在計算機(jī)中所有的數(shù)據(jù)都是存放在存儲器中的,存儲器被劃分為一個一個的內(nèi)存單元,為了正確的找到這些信息,必須為每一個內(nèi)存單元進(jìn)行編號,內(nèi)存單元的編號就是地址。地址通常也稱為指針。
如何定義一個指針變量?
- 對指針變量的定義包括三個內(nèi)容:
1、指針類型的說明,定義變量為一個指針變量;
2、指針變量名;
3、變量值(指針)所指向的數(shù)據(jù)類型;
指針變量定義的一般形式為:
- 類型說明符 變量名;
例:
int p2; /p2是指向整型變量的的指針變量/
float *p3; //p3是指向浮點(diǎn)型變量的指針變量
char *p4; //p4是指向字符型變量的指針變量
指針變量的使用:
指針變量和普通變量一樣,使用之前必須要定義說明和賦值。未經(jīng)賦值的指針變量不能使用,否則會造成系統(tǒng)混亂,甚至是死機(jī)。
指針變量的賦值只能是地址,決對不能賦其他任何數(shù)據(jù)。
兩個相關(guān)的運(yùn)算符: &:取地址運(yùn)算符; *:指針運(yùn)算符(或間接訪址運(yùn)算符)。
C語言中提供了地址運(yùn)算符&,表示變量的地址;
使用的一般形式為:
&變量名;
例:&a 表示變量a的地址,&b表示b的地址,變量本身必須事先說明。
指針變量的運(yùn)算
1、賦值運(yùn)算
- 把一個變量的地址賦值給指向相同數(shù)據(jù)類型的指針變量
int a ,*pa;
pa=&a;//把整型變量a的地址復(fù)制給整型指針變量pa - 把一個指針變量的值賦給另一個指針變量(二者類型相同)
int a,pa,pb;
pa=&a;
pb=pa; //把a(bǔ)的地址賦給pb,pa,pb類型相同可以相互賦值; - 把數(shù)組的首地址賦給指向數(shù)組的指針變量
int a[5],*pa;
pa=a;//注意:這里不需要取地址符,a表示數(shù)組的首地址
//等價于 pa=&a[0];數(shù)組第一個元素的地址也是整個數(shù)組的首地址 - 把字符串的首地址賦給指向字符類型的指針變量
char *p;
p="C program";//這里不是吧整個字符串裝入指針變量,而是把存放該字符串的字符數(shù)組的首地址裝入指針變量。 - 把函數(shù)的入口地址賦給指向函數(shù)的指針變量
int (*pf)();
pf=f; //f為函數(shù)名
2、指針變量的加減法
指針的加減法主要的運(yùn)算對象是數(shù)組。
指針變量加上或減去一個整數(shù)n的意義是把指針指向的當(dāng)前位置(某數(shù)組元素)向前向后移動n個位置。
數(shù)組指針和指向數(shù)組的指針變量
一個變量有一個地址,一個數(shù)組包含若干個元素,每個數(shù)組元素都在內(nèi)存中占用存儲單元,他們都有相應(yīng)的地址。所謂數(shù)組的指針是指數(shù)組的起始地址,數(shù)組元素的地址是數(shù)組元素的地址。
指針數(shù)組的概念:
- 一個數(shù)組的所有元素都是指針則是數(shù)組指針,指針數(shù)組是一組有序的指針的集合。
- 指針數(shù)組的所有元素必須是具有相同存儲類型和指向相同數(shù)據(jù)類型的指針變量。
- 指針數(shù)組的一般形式:
- 類型說明符 * 數(shù)組名【數(shù)組長度】;
- 其中類型說明符為指針指向的變量的類型:
例如:int *pa[3];:pa是一個指針數(shù)組,他有三個數(shù)組元素,每個元素都是一個指針,指向整型變量。