<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【知其所以然】語義"陷阱"---數組和指針

      數組和指針經常出現于編程語言中、也許上課的時候老師也說過數組和指針有區別、參考書上也應該講過,你是不是也不曾透徹的理清過?

      這篇博文主要從內存和編譯的角度指出了數組和指針在訪問方式上的區別、至于他們在函數調用的區別、以及它們的聯系將在下一篇中詳細討論。

       

      為了說的清楚些、會先說一些基礎的部分、如果你已經掌握大可跳過

      What's a Declaration? What's a Definition? 聲明和定義

      c語言的對象必須有且只有一個定義,但可以有多個聲明(extern)這里說的對象和面向對象中的對象沒有關系。

      A definition is the special kind of declaration that creates an object; a declaration indicates a name 
      that allows you to refer to an object created here or elsewhere。

      定義是一種特殊的聲明、它創建了一個對象;聲明簡單的說明了在其他地方創建的對象的名字,它允許你使用這個名字。

      可以簡單的這樣理解:

      聲明Declaration:描述在其他地方創建的對象,并不分配內存。(可以出現在多個地方)

      定義Definition:產生一個新的對象,并分配內存。(只能出現一次)

       

      How Arrays and Pointers Are Accessed -數組和指針是如何訪問的

      數組和指針在內存中的訪問方式是不一樣的。這里先要注意一下“地址y”和“地址y的內容”的區別。“地址y”表示變量y在內存中的地址,而“地址y的內容”指的是

      位于這個地址中的內容,也就是變量y的值。大多數編程語言中用同一個符號來表示這兩個東西,而由編譯器根據上下文環境判斷它的含義。

      以一個簡答的賦值為例:

      上文中的x指的是x所代表的地址,而y的含義是y的內容。

      出現在賦值符號左邊的值稱為左值、賦值符號右邊的稱為右值。編譯器為每個變量分配地址(左值)。這個地址在編譯時可知且一直存在,而它的右值在運行時

      才能知道。通俗的說:每個變量都有一個地址,這個地址在編譯時可以知道,而地址里存儲的內容(也就是變量的值)只有在運行時才能知道。如果需要用到變量

      的值,(也就是已知地址存儲的值)那么編譯器發出指令從指定地址讀入變量值并放入相應寄存器中。

        這里的關鍵是地址在編譯時可知、如果要對進行一些操作(比如說加上偏移量之類的)可以直接操作。相反、對于指針,必須在運行時取得它的地址,然后才能

      對它進行接觸引用操作。下圖展示了對數組下標的引用:

        這樣我們就可以解釋為什么extern char a[]和extern char a[100]相同的原因了。這兩個什么都是表名a是一個數組,也就是一個內存地址,

      數組內的字符可以由這個地址找到。

      和上面不同的是,如果聲明的是一個指針,如  extern char *p,它表示p指向一個字符,為了取得這個字符,必須知道地址p的內容,把它作為字符的地址

      并從這個地址中取得這個字符。

      如果是數組a[],那么可以直接用數組名來訪問數組中的元素,因為它的內容就是第一個元素, 他的下一個地址也就對應了下一個數組元素的地址。

      如果是指針*a,先要取出地址a的內容,再把它作為變量的地址并從這個地址中取得變量的內容。

       

      數組和指針的其他區別:

       

      定義指針時,編譯器并不為它所指向的對象分配空間,只為指針本身分配空間。除非在定義同時付給一個指針一字符竄常量進行初始化。

      如:char *p = "breadfruit"; 

      一般情況下初始化指針時創建的字符串變量被定義為只讀。如果試圖修改就會出現未定義的行為。

       

      這篇文章主要是從訪問形式上對數組和指針的區別做了些小的總結,而對于數組和指針在函數調用中、已經更本質的區別、什么時候數組

      和指針又是等同的、將在下一篇博文中給出。如果完全弄清楚了、對今后的編程也會有不小的幫助。

       

      參考資料:《expert c programming》

      下載:Expert C Programming.pdf

       

      歡迎任何形式的轉載,請注明出處:http://www.rzrgm.cn/yanlingyin/

      一條魚~ @博客園

       

       

       

      posted @ 2011-11-29 22:55  Geek_Ling  閱讀(5008)  評論(4)    收藏  舉報
      主站蜘蛛池模板: 国产口爆吞精在线视频2020版| 国产AV影片麻豆精品传媒| 亚洲顶级裸体av片| 亚欧洲乱码视频在线观看| 日韩av爽爽爽久久久久久 | 国产精品无码a∨麻豆| 免费网站看V片在线毛| 成年午夜性影院| 国产成人永久免费av在线| 久久99国产一区二区三区| 少妇内射高潮福利炮| 中文字幕日韩有码国产| 久久精品一区二区三区av| 久久久久免费看成人影片| 国内精品久久人妻互换| 日韩国产欧美精品在线| 蜜臀av日韩精品一区二区| 中文字幕在线精品视频入口一区| 通道| 亚洲av一区二区在线看| 日韩精品中文字幕亚洲| 色AV专区无码影音先锋| 嘉黎县| 亚洲欧美日韩在线码| 四虎成人在线观看免费| 蜜桃av色偷偷av老熟女| 加勒比亚洲天堂午夜中文| 久久精品国产亚洲av麻豆不卡| A级毛片100部免费看| 亚洲欧美综合中文| 国产亚洲一区二区三区啪| 国产老熟女国语免费视频| 成人午夜大片免费看爽爽爽| 国产亚洲精品久久久久婷婷图片| 无码AV无码免费一区二区| 国产亚洲精品久久久网站好莱| 亚洲色在线v中文字幕| 久久亚洲综合精品成人网| 亚洲国产欧美在线人成| 午夜精品久久久久久久爽| 亚洲精国产一区二区三区|