指標,指標,指標。。。
阿新 • • 發佈:2019-01-06
1、指標常量與常量指標
int a = 10;
int * const p1 = &a;
const int * p2 = &a;
p1是不可改變地址的常量,即指標常量,但可以對它所指向的內容進行修改。
p2是指向常量的指標,即常量指標,它所指向的地址內容是不可修改的,但其本身確實可以修改的。
2、指標運算
執行結果:ivalue=6 cvalue=24#include<stdio.h> int main() { int *ip1,*ip2,ivalue; char *cp1,*cp2,cvalue; ip1 = (int*)0x500; ip2 = (int*)0x518; ivalue = ip2 - ip1; cp1 = (char*)0x500; cp2 = (char*)0x518; cvalue = cp2 - cp1; printf ("ivalue=%d cvalue=%d\n",ivalue,cvalue); return 0; }
指標進行運算時,它的值與其型別有關。兩個地址同樣相差24個位元組,以整形指標相減結果為 24/4=6;以字元指標相減結果為 24/1=24;
3、指標與陣列
輸出結果:12196#include<stdio.h> int main() { int a[2][3][4] = { {{101,102,103,104},{111,112,113,114},{121,122,123,124}}, {{201,202,203,204},{211,212,213,214},{221,222,223,224}} }; printf("%d\t%d\n",**(a[0]+2),sizeof(a)); return 0; }
分析:對於一位陣列a,*a等價於a[0],*(a+2)等價於a[2]。同理對於多維陣列*a[0]等價於a[0][0],*(a[0]+2)等價於a[0][2],**(a[0]+2)等價於*a[0][2]等價於a[0][2][0]。
sizeof(a)計算陣列a所佔記憶體空間:(2*3*4)*4Byte=96Byte。
4、指標陣列 與 陣列指標
int *p[N],p代表一個可存放N個整型指標型別元素的一維陣列,p是指標陣列,本質是陣列,是常量。
int (*p)[N],p代表一個指向由N個整型資料組成的一維陣列的指標,p是陣列指標,本質是指標,是變數。
5、指標函式 與 函式指標
int * f(int x),f代表一個返回值為整型指標的函式,f是指標函式,本質是函式。
int (*f)(int x),f代表一個指向函式的指標,該函式的引數和返回值均為整型,f是函式指標,本質是指標。