指針存放的十另一變量佔存儲單元的起始地址;
指針變量的類型由其基類型確定,不管是何種類型的指針,所佔的存儲字節與機器長相當;如32位機,指針佔4字節;
指針聲明的一般形式:
T *標識符,*標識符2...*標識符n;其中T是數據類型,*是指針說明符,標識符n是指針類型的指針的名字。
指針變量可以在聲明的時候進行初始化,但必須用所指變量的地址進行初始化,初始化後的指針指向以初值爲地址的變量;
int x = 10, *p = &x;
複雜聲明及其含義:
int (*p1)[3]; 指向含有三個元素的數組的指針;
double *p2[5]; 指向double類型的含有五個指針變量的指針數組;
char (*fp)(int, int); 函數名爲fp參數爲(int,int)返回值爲char 類型的指針函數;函數指針是指向函數的指針變量,即本質是一個指針變量;
int add(int a,int b)
{
return a + b;
}
int sub(int a,int b)
{
return a - b;
}
int mul(int a,int b)
{
return a * b;
}
int divdiv(int a,int b)
{
return a / b;
}
int operation(int a,int b,int (*operator)(int,int))
{
return operator(a,b);
}
- (void)viewDidLoad {
[super viewDidLoad];
int (*pfunc)(int,int) = add;
int result = 0;
char op = '/';
switch (op) {
case '+':
pfunc = add;
break;
case '-':
pfunc = sub;
break;
case '*':
pfunc = mul;
break;
case '/':
pfunc = divdiv;
break;
default:
break;
}
result = operation(3,3,pfunc);
NSLog(@"%d",result);
}
通過判斷符號爲函數指向相應的函數,從而計算結果時執行相應的操作;
int *fp(float); 函數名爲fp,參數(float)返回值爲整形指針類型的函數指針;指針函數是指帶指針的函數,即本質是一個函數。函數返回類型是某一類型的指針
int (*fp_ary[2])(char *,int*); 含有兩個函數指針變量的數組,每個指針指向參數爲(char*,int*)返回值爲int類型的函數指針;
聲明指針的目的是希望通過指針實現對內存中變量的快速訪問,必須使用單目*間訪運算符才能間接訪問。單目*運算符實際上是單目&運算的逆運算。
類型爲void *的指針稱爲無值型指正或void指針。任何類型的指針都可以將其賦值給void指針,但不能對void指針執行間訪操作;
指針的移動是指指針在原有的位置基礎上,通過加一個後者減一個整數實現指針的前移或者後移;
同類型的指針可以直接使用賦值操作符進行賦值操作: int a[3] = {3,4,5}, *p = a, *q = p;不同基本類型指針之間的賦值運算必須使用類型強制;
數組元素既可以用下標表示,也可以用指針表示;對於T類型的數組元素a[i],用下標表示其地址爲&a[i],用指針表示時其地址爲a+i;