c復習過程隨筆八
指針:是指變量的地址
指針變量:是存放地址的變量
定義:類型名 *指針變量名 * 是指該變量的類型是指針類型 地址應該賦給指針變量,前面不加*
指針變量前加基類型以知道這個地址存放的是什麽類型,只能指向相同的實型變量,相關運算也許要知道指針所指的數據類型。
指針變量只能存放地址,不要將一個整數賦給一個指針變量
引用指針變量:
(1)給指針變量賦值
p=&a //a的地址賦給指針變量p
(2)引用指針變量指向的變量
如pritnf("%d",*p);
*p=1;將整數1賦給p當前所指向的變量,如果p指向變量a,則相當於把1賦給a,即a=1
(3) 引用指針變量的值
printf("%o",p);
以八進制數形式輸出指針變量p的值,如果p指向a,就是輸出a的地址
指針變量作為函數參數可以通過調用函數使變量的值發生變化,在主調函數中可以使用這些改變了的值(不能通過改變指針形參的值來使指針實參的值改變)
(一般函數調用只可以得到一個返回值,使用指針作參數,可以得到多個變化的值)
通過指針引用數組
數組元素的指針就是數組元素的地址
p=&a[0];//p的值是a[0]的地址
p=a;//p的值是數組a首元素a[0]的地址
int *p=&a[0];等價於 int *p; p=&a[0];
定義時也可以寫成 int *p=a;
在指針指向數組元素時,(1)如果指針變量p已指向數組中的一個元素,則p+1指向同一數組中的下一個元素,p-1指向同一數組中的上一個元素(地址加上一個數組元素的字節數)
(2)如果p的初值是&a[0],則p+i和a+i就是數組元素a[i]的地址,或者說,他們指向a數組序號為i的元素
(3)*(p+i),*(a+i)是指a[i]。(4)如果指針變量p1和p2都指向同一數組,如執行p2-p1,結果是p2-p1的值除以數組元素的長度,表示p2和p1所指的元素之間差的元素個數
所以引用數組元素可以通過a[i]或*(a+i)的形式
*p++,*(p++)和*(p--)先取*p值,然後使p加減1
*(++p)和*(--p)先使p加減1,然後取*p值
++*p和--*p表示p指向的元素值加減1
要在函數中改變數組中的元素值,可以實參和形參都用數組名,實參用數組名、形參用指針變量,實參形參都用指針變量,實參用指針變量、形參用數組名。
通過指針引用多維數組
多維元素的地址:對於二維數組a[3][4]來說,a代表二維數組首元素的地址,他不是一個簡單的整型元素,而是四個整型元素所組成的一維數組,因此a代表的是首行(即序號為0的行)的首地址,a+1代表序號為1的行的首地址
如果二維數組的首行的首地址為2000,一個整型數據占四個字節,則a+1的值應該是2000+4*4=2016。a+1指向a[1]。a[0]代表一維數組a[0]中第0列元素的地址,即&a[0][0],也就是說a[1]的值是&a[1][0],a[2]的值是&a[2][0]
第0行1列的地址用a[0]+1表示,也可寫*(a+0)+1 。*(a[0]+1)和*(*(a+0)+1 )和*(*a+1 )就是a[0][1]的值。
指向多維數組元素的指針變量:
(1)指向數組元素的指針變量
int * 指針變量名 a[i][j]=i*m+j
(2)指向由m個元素組成的一維數組的指針變量
int (* p)[4] 表示定義p為一個指針變量,它指向包含4個整形元素的一維數組,此時,p被定義為指向一維整型數組的指針變量,一維數組有4個元素,因此p的基類型是一維數組,其長度是16字節。這時不能指向數組中的某一元素 a是一維數組 p=&a(p指向一維數組行) 而不是p=a(p指向a[0])
(3)用指向數組的指針做函數參數
用指針變量作形參,指向變量的指針變量或指向一維數組的指針變量
通過指針引用字符串
字符串的引用方式:字符數組存放一個字符串,可以通過數組名和下標引用字符串中的一個字符,也可以通過數組名和格式聲明%s輸出該字符串。用字符指針變量指向一個字符串常量,通過字符指針變量引用字符串常量。
char * string="I love China" string指向字符串的第一個字符
C語言對字符串常量是按字符數組處理的,在內存中開辟了一個字符數組用來存放該字符串常量,這個字符數組沒有名字,只能通過指針引用。在c中只有字符變量沒有字符串變量。
字符指針做函數參數
(1)可用字符數組名作函數參數(2)用字符型指針變量作實參(3)用字符指針變量 作形參和實參
指向函數的指針
定義一個指向函數的指針變量,用來存放某一函數的起始地址。這就意味著此指針變量指向該函數
int (* p)(int,int) (註意:*p兩側的括號不可省略,表示p先與*結合,是指針變量,然後再與後面的()結合,()表示是函數)
怎樣定義
類型名 (*指針變量名)(函數參數表列) (指針變量只能指向在定義時指定的類型的函數)
用指向函數的指針作函數參數
指向函數的指針變量的一個重要用途是把函數的地址作為參數傳遞到其他函數
指針數組
元素均為指針類型數據的數組稱為指針數組
定義:*類型名數組名[數組長度]
指向指針的指針
如 char **p 表示p指向一個字符指針變量(這個字符指針指向一個字符型數據),如果引用*p就得到指向的字符指針變量的值
c復習過程隨筆八