C語言筆記-指標(8)指標的運算


    陣列的某個成員可以用陣列的基址加上一個偏移量來表示
聲明一個指標 double *p;
他當做基址,可以向陣列一樣使用偏移量來表示:
p[0]為第一個成員,p[1]為第2個成員 以此類推

所以只要有指標的基址跟相鄰成員間的距離就可以當成陣列來使用了。

教科書常出現:
p[1]同等於*(p+1)
所以 陣列第一個成員是p[0] ==*(p+0)


以下有三條規則:
  • 可以通過指標形式 double *p,或是靜態/自動形式的double p[10]來聲明陣列
  • 無論哪個,第n+1個陣列成員都是p[n],第一項是0不是1
  • 如果要第n個成員的位址,使用&符號:&p[n]
    第一個成員的位址&p[0]==p

簡單的程式範例:

#include <stdio.h>



int main(void){


    int evens[5]={1,2,3,4,5};


    printf("the first even number is%i\n",*evens);


    int *positive_evens=&evens[1];


    printf("the first positive even number is%i\n",positive_evens[0]);


}



--------------小技巧---------------
在"p+1表示陣列中下一個成員對只(&p[1])"這個規則的基礎下,在下例使用
一個備用指標來指向list的頭,然後p++在陣列中向前遍歷,直到陣咧尾部的NULL標記,從而得到整個陣列的值。


#include <stdio.h>



int main(){
    char *list[]={"first","second","third",NULL};
    for(char **p=list;*p!=NULL;p++)
        printf("%s\n",p[0]);
}



此文章內容參考"21 century c"一書,在此做筆記
如須刪除請告知 謝謝

這個網誌中的熱門文章

FreeRTOS學習筆記 (二)-任務創建和刪除(xTaskCreate及vTaskDelete)

FreeRTOS學習筆記 (三)-時間管理vTaskDelay()及vTaskDelayUntil()

C語言筆記-文本處理(1) 善用 asprintf取代sprintf