C語言中的指標與數組

來源:互聯網
上載者:User

標籤:

1、指標與數組

 

    1)指標與一維數組

 

       i.數組指標(指向數組元素的指標)

 

        類型  *指標變數名;

 

        指標定義完成後要初始化(不想讓指向任何內容,=0,=NULL)

        int a[10];

        int *p = &a[0];   // &a[0] == a

        int *p1 = a;

 

       ii.用數組的指標訪問數組元素

      

        位移:指標變數的位移

 

        p1 = p1+1;    //向下位移1個一個數組元素

        p1++;   //p1中存放的還是地址

   

        ....

        如果用指標訪問第i個元素 p1+i

        取出pi指向的元素的值:*(p1+i);    ==  a[i]元素的值

 

        具體地址值計算:p1+sizeof(數組的類型)

 

 

       指標數組(數組中的每個元素都是指標)

 

         數組中的每一個元素還是一個指標

         int a[3][3]={11,2,3,4,5,6,7,8,9};

          a[0]  //行地址

          a[1]

          a[2]

 

         //pa就是一個指標數組

         int *pa[3]={a[0],a[1],a[2]};

 

   

   2)指標與二維數組

 

       數組指標(指向數組元素的指標)

       特定的格式:

 

        int (*p3)[3]; //定義一個指向二維數組的指標,而且二維數組的第二維長度要是3

    

        int b[3][3];

 

         p3 = b;

 

        int b1[2][3];

 

         p3 = b1;

 

        int b2[2][2];

       

         p3 = b2;  //編譯器給警告

 

 

        用指標對二維數組的遍曆

 

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

         int (*p1)[3] = a;

 

                   0    1   2

              a[0]+0 a[0]+1 a[0]+2

 

          a[0]     1    3   3

          a[1]     2    3   4

          a[2]     5    6   6

 

            一維數組中: *(p1+0)  = a[0]的值

 

              *(a[0]+1)  

              *(*(p1+0)+1)   == a[0][0] 元素的值

              求a[i][j] = *(*(p1+i)+j)

 

     

       指標數組(數組中的每個元素都是指標)

    

         char *name[3][5]={"aaa","bbbb","cccc"};

 

2、字元數組與字串指標

 

       char 數組名[10];

 

       c語言中沒有字串變數,字串都是通過數組來儲存的

 

       char a[10]="xxxx";  //數組長度10,字串的長度5(sizeof),strlen值4

 

       //字串指標

       char *str ="azaaa";

 

       字元數組和字串指標的區別

 

       1)字元數組,由數組元素組成,char c[5];c[5]=‘b‘; 存到棧區

       2)字串指標他只存放了字串的首地址,存放到常量區

       3)字串指標來說  

          char *s;

          s = "hello";

 

          char ch[5];

           ch[5]="aa";  //錯誤的

 

3、補加的輸入輸出函數

  

    scanf   gets(不安全的)   puts

 

    fgets(指標,n,stdin); //安全的,

         //從鍵盤接收字串,放到指標指向的地址,如果字串長度大於了n,這個時候只接收的字串長度是:n-1,最後一個自動化佈建為‘\0‘

    fputs(指標,stdout);

         //輸出現實

 

 

4、const修飾變數和指標

 

    int const *p  //值不能變,指向可變

 

    const int *p  //同上

 

    int * const p;//指向不可變,值可變

 

    const int * const p;  //值和指向都不能變

 

 

5、動態記憶體分配

 

    記憶體的分區:

 

    代碼區  編譯產生的二進位代碼

    資料區  程式需要交換的資料

    常量區  常量   字串常量

    堆區    程式啟動並執行過程中動態申請的記憶體

    棧區    局部變數儲存

 

 

    動態記憶體申請:

 

    程式啟動並執行過程中向堆區動態申請一塊記憶體地區

 

    void* malloc(n)  //從記憶體的堆區中申請n個位元組記憶體

    void* null 指標類型

 

    儲存整數

    

    //申請了一個4個位元組長度的記憶體地區,首地址放到了p中

    int *p =(int *)malloc(4);

    char *p1 =(char *)malloc(4);

    float *p2 = (float *)malloc(4);

 

    向記憶體單元中儲存內容:

 

    *p = 10;

C語言中的指標與數組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.