關於C中數組和指標的一點理解

來源:互聯網
上載者:User

標籤:int   image   bubuko   編譯   大小   col   關於   一點   style   

 

今天在看了專家c的第四章後對數組和指標有了更深入的理解

 

首先

1 /*檔案1*/2 int p[100];3 4 /*檔案2*/5 extern int *p;6 7 /*.........................*/8 9 /*.............對p[i]相關的操作.................*/

 

為什麼會這樣呢?指標和數組難道不就是一個玩意嗎?   然而並不是.

 

先列出指標和數組的重要區別

------------------------------------------------------------------------------------

|          指標                                |                          數組                         |

------------------------------------------------------------------------------------

|         儲存的是資料的地址         |                 儲存資料本身                   |

------------------------------------------------------------------------------------

|        間接訪問資料,首先在         |              首先在符號表中找到數組    |

|        符號表中找到該指             |              的地址,然後從該位置開始    |

|        針的地址,取出記憶體中的     |              後面連續的位置全為資料     |

|        值,然後訪問該值所指         |                                                         |

|        的地址從而達到資料         |                                                          |

---------------------------------------------------------------------------------------

 

根據以上區別,推導一下平時用指標來訪問數組的過程

 

(1) 當我們有

char *p="12345";c=*p;

通過如下過程獲得資料

 

1.編譯器在符號表取得p的地址

2.然後取得p中的內容

3.以p中內容為地址得到資料

 

(2)當我們有

char p[]="12345";c=p[3];

通過如下過程獲得資料

 

1.編譯器在符號表中取得p的地址

2.從p開始的連續多個位元組中就是存的資料,這裡是3就是從p開始跳三步,每步大小為一位元組

 

(3)當我們有

char *p="12345";c=p[3];

通過如下過程獲得資料

 

1.編譯器在符合表中獲得p的地址(這個字串常量會分配記憶體且被定義為唯讀)

2.從p的地址中讀出內容,即指標

3.將內容與位移量相加這裡是3

4.以3為地址取出該位置的值

 

再來思考一下開始的那個錯誤

 

1  /*檔案1*/2  int p[100];3  4  /*檔案2*/5  extern int *p;6  7  /*.........................*/8  9  /*.............對p[i]相關的操作.................*/

 

在檔案二中我們聲明了p為一個指標,編譯器會把它當做指標來解釋(無論p之前是定義為數組還是指標)從而也就是我們上面的情況(3)

 

將執行

1.在符號表中找到p的地址

2.取出p中的內容作為地址

3.將............等一等.........

 

我們發現在檔案一中,p定義為數組

也就是說按照這種機制,p的第一個資料將被編譯器解釋成一個地址,一個int型的數當成了一個地址....................................所以錯誤可想而知.......

 

關於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.