指針

指針存放的十另一變量佔存儲單元的起始地址;

指針變量的類型由其基類型確定,不管是何種類型的指針,所佔的存儲字節與機器長相當;如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;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章