數組和指標————C語言學習筆記1

來源:互聯網
上載者:User

C語言中,數組是數組,指標是指標,兩者是完全不同的,通俗的話來說,一個是地址符號,一個是儲存變數地址的變數。

 

但是有時候他們又是可以相同的。

 

於是首先,我們應該知道兩者在什麼時候是“相似”的。

1、“運算式中的數組”就是指標;

2、C語言把數組下標作為指標的位移量;

3、“作為函數參數的數組名”等同於指標;

對數組的引用如a[i]在編譯時間總是被編譯器改寫成*(a+i)的形式。C語言之所以把數組形參轉換為指標是處於效率的考慮,由於不可能對整個數組進行拷貝,而是“所有的數組在作為參數傳遞時都轉化為指向數組起始地址的指標”。

摘自《Expert C Programming》---Peter Van Der Linden

手動實驗1:

[lanux@localhost Program]$ cat pointer_and_array_01.c

#include <stdio.h>

char ga[8]="goblecha";

void print_array(char arr[])

{

   printf("/nIn Function print_array:/n");

   printf("arr    address,on goble ga:%d/n",&arr);

   printf("arr[0] address,on goble ga:%d/n",&(arr[0]));

   printf("arr[1] address,on goble ga:%d/n",&(arr[1]));

}

void print_pointer(char *ptr)

{

    printf("/nIn Function print_pointer:/n");

    printf("ptr    value,  on goble ga:%d/n",&(*ptr));

    printf("ptr    address,on goble ga:%d/n",&ptr);

    printf("ptr[0] address,on goble ga:%d/n",&(ptr[0]));

    printf("ptr[1] address,on goble ga:%d/n",&(ptr[1]));

    printf(" ++ptr   value,on goble ga:%d/n",++ptr);

}

main()

{

   printf("/nIn the main:/n");

   printf("goble ga    adrress:%d/n",&ga);

   printf("goble ga[0] address:%d/n",&(ga[0]));

   printf("goble ga[1] address:%d/n",&(ga[1]));

   print_array(ga);

   print_pointer(ga);

   printf("/n");

   return 0;

}

[lanux@localhost Program]$ gcc -W pointer_and_array_01.c -o test

[lanux@localhost Program]$ ls

a.out  notes.1  pointer_and_array_01.c  test

[lanux@localhost Program]$ ./test

In the main:

goble ga    adrress:134519160

goble ga[0] address:134519160

goble ga[1] address:134519161

In Function print_array:

arr    address,on goble ga:-1077022384

arr[0] address,on goble ga:134519160

arr[1] address,on goble ga:134519161

In Function print_pointer:

ptr    value,  on goble ga:134519160

ptr    address,on goble ga:-1077022384

ptr[0] address,on goble ga:134519160

ptr[1] address,on goble ga:134519161

 ++ptr   value,on goble ga:134519161

[lanux@localhost Program]$

 

初始化的全域變數ga儲存在全域區,而儲存在棧區的函數參數變數,如arr[],*ptr,其實都是一個指標,即一個儲存地址的變數(這裡儲存的地址指向全域字元數組ga)。

 

01:26:10

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.