C語言day09-01指針和數組

pragma mark 指針和數組

pragma mark 概念

pragma mark 代碼

#include <stdio.h>
int main()
{
#warning 指針和數組
#warning 定義一個指針指向數組
    /*
    int num = 10;
    int *numP = #
    num = 55;
    *numP = 100;
    printf("%i\n",num);
    printf("%i\n",*numP);
    
    int ages[3] = {1,3,5};
    // 數組名稱就是數組的地址,數組的地址就是首元素的地址
    printf("ages = %p\n",ages);
    printf("&ages[0] = %p\n",&ages[0]);
    
    // 指針是專門用于保存地址
    // 數據類型 *變量名稱;
    // 由于數組的首元素的地址就是數組的地址,所以定義一個指針指向數組其實就是定義一個指針指向數組的首元素,所以數組的首元素是什么類型,那么指向指向數組的指針就是什么類型.
//    int *p = &ages[0];
    int *p = ages;
    printf("p = %p\n",p);
    printf("&ages[0] = %p\n",&ages[0]);
     */
#warning 如何利用指針操作數組 方式1
    /*
    int ages[3] = {1,3,5};
    ages[0] = 998;
    // 相當于 0x7fff5fbff79c[0]
    printf("ages[0] = %i\n",ages[0]);
    
    int *p = ages; // int *p = &ages[0]; &ages == ages
    printf("p = %p\n",p);
    printf("ages = %p\n",ages);
    
    // 因為p指針中存儲的值和ages中存儲的值相同,所以以前用ages的地方都可以使用p來替代
    p[0] = 221;
    // 相當于 0x7fff5fbff79c[0]
    printf("age[0] = %i\n",p[0]);
    
    for (int i = 0; i < 3; i++) {
        printf("p[%i] = %i \n",i,p[i]);
    }
     */
#warning 方式2
    
    /*
    int ages[3] = {1,3,5};
    int *p = ages; //int *p = &ages[0];
    printf("ages[0] = %i\n",ages[0]);
    printf("*p = %i\n",*p);
    
    printf("指針加1之前 p = %p\n",p);
//    p = &ages[1];
    // 指針+1, 并不是真實的+1,而是+4
    // 指針+1, 其實是加上指針類型所占用的長度
    // 指針類型的兩個用途: \
    第一個用途 : 取值的時候, 會根據指針類型所占用的字節 去 取出對應字節的數據 \
    第二個用途, 用于做加法運算, 指針+1 , 其實是加上指針類型所占用的長度,如果當前指針類型是int,  那么+1本質上是加上4個字節
    
    p = p + 1;
    printf("指針加1之后 p + 1 = %p\n",p);
    printf("*p = %i\n",*p);
//    p = &ages[2];
    p = p + 1;
    printf("指針加1之后 p + 2 = %p\n",p);
    printf("*p = %i\n",*p);

    
    int a = 10;
    a = a + 1;
    printf("a = %i\n",a);   // 11
     */
    
    /*
    int num = 10;
    int *numP = #
    printf("num = %i\n",num);
    // *numP 代表訪問numP之鄉的那塊內存空間
    printf("*numP = %i\n",*numP);
     */
 
    /*
    char c = 'a';
    char *cp = &c;
    printf("cp = %p\n",cp);
    cp = cp + 1;
    printf("cp  + 1 = %p\n",cp);
    cp = cp + 1;
    printf("cp  + 1 = %p\n",cp);
     */
    
    int ages[3] = {1,3,5};
    int *p;
    p =ages;
    /*
    printf("age[0] = %i\n", *p + 0);
    printf("age[i] = %i\n", *(p + 1)); // p = p + 1; *p;
    printf("age[2] = %i\n", *(p + 2)); // p = p + 1; *p;
     */
    /*
    for ( int i = 0 ; i < 3; i++) {
        printf("ages[%i] = %i\n",i,*(p + i));
    }
     */
    
    /*
     只要一個指針指向了數組,那么訪問數組就有3種方式:
     1 : ages[0];
     2 : p[0];
     3 : *(*p + 0);     // 大神的寫法 另一種訪問方式 0[p]
     */
    
    
    printf("age[0] = %i\n",0[p]);
    
    return 0;
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 指針是C語言中廣泛使用的一種數據類型。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數據結構; ...
    朱森閱讀 3,479評論 3 44
  • 前言 最近真的是忙的不可開交,公司一直給安排任務,連學習和寫筆記的時間都沒有了,落下好幾次課的筆記都沒有寫,所以我...
    Xiho丶閱讀 1,544評論 1 12
  • 概述在iOS開發中UITableView可以說是使用最廣泛的控件,我們平時使用的軟件中到處都可以看到它的影子,類似...
    liudhkk閱讀 9,093評論 3 38
  • 一本道來其他系列C語言關鍵字C語言注釋符號一本道來C語言編譯預處理技術一本道來 指針的基礎 注意本節內容可能在gc...
    PcDack閱讀 1,294評論 0 2
  • 昨天突發奇想買一雙加長筷子,炸油條,撈面條媽媽再也不怕燙手了,淘寶一搜,5.8元,郵費5元,習慣性地看看店鋪有...
    番可溫閱讀 506評論 3 2