最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C 語(yǔ)言指針概念的詳解

 更新時(shí)間:2016年08月23日 09:10:58   投稿:lqh  
這里主要介紹C 語(yǔ)言指針,這里整理了詳細(xì)的資料,對(duì)指針做了詳細(xì)說(shuō)明及簡(jiǎn)單示例代碼幫助大家理解什么是指針,有興趣的小伙伴可以參考下

計(jì)算機(jī)中所有的數(shù)據(jù)都必須放在內(nèi)存中,不同類型的數(shù)據(jù)占用的字節(jié)數(shù)不一樣,例如 int 占用4個(gè)字節(jié),char 占用1個(gè)字節(jié)。為了正確地訪問(wèn)這些數(shù)據(jù),必須為每個(gè)字節(jié)都編上號(hào)碼,就像門牌號(hào)、身份證號(hào)一樣,每個(gè)字節(jié)的編號(hào)是唯一的,根據(jù)編號(hào)可以準(zhǔn)確地找到某個(gè)字節(jié)。

下圖是 4G 內(nèi)存中每個(gè)字節(jié)的編號(hào)(以十六進(jìn)制表示):

我們將內(nèi)存中字節(jié)的編號(hào)稱為地址(Address)或指針(Pointer)。地址從 0 開始依次增加,對(duì)于 32 位環(huán)境,程序能夠使用的內(nèi)存為 4GB,最小的地址為 0,最大的地址為 0XFFFFFFFF。

下面的代碼演示了如何輸出一個(gè)地址:

#include <stdio.h>
int main(){
 int a = 100;
 char str[20] = "c.biancheng.net";
 printf("%#X, %#X\n", &a, str);
 return 0;
}

運(yùn)行結(jié)果:

0X28FF3C, 0X28FF10

%#X表示以十六進(jìn)制形式輸出,并附帶前綴0X。a 是一個(gè)變量,用來(lái)存放整數(shù),需要在前面加&來(lái)獲得它的地址;str 本身就表示字符串的首地址,不需要加&。

一切都是地址

C語(yǔ)言用變量來(lái)存儲(chǔ)數(shù)據(jù),用函數(shù)來(lái)定義一段可以重復(fù)使用的代碼,它們最終都要放到內(nèi)存中才能供 CPU 使用。

數(shù)據(jù)和代碼都以二進(jìn)制的形式存儲(chǔ)在內(nèi)存中,計(jì)算機(jī)無(wú)法從格式上區(qū)分某塊內(nèi)存到底存儲(chǔ)的是數(shù)據(jù)還是代碼。當(dāng)程序被加載到內(nèi)存后,操作系統(tǒng)會(huì)給不同的內(nèi)存塊指定不同的權(quán)限,擁有讀取和執(zhí)行權(quán)限的內(nèi)存塊就是代碼,而擁有讀取和寫入權(quán)限(也可能只有讀取權(quán)限)的內(nèi)存塊就是數(shù)據(jù)。

CPU 只能通過(guò)地址來(lái)取得內(nèi)存中的代碼和數(shù)據(jù),程序在執(zhí)行過(guò)程中會(huì)告知 CPU 要執(zhí)行的代碼以及要讀寫的數(shù)據(jù)的地址。如果程序不小心出錯(cuò),或者開發(fā)者有意為之,在 CPU 要寫入數(shù)據(jù)時(shí)給它一個(gè)代碼區(qū)域的地址,就會(huì)發(fā)生內(nèi)存訪問(wèn)錯(cuò)誤。這種內(nèi)存訪問(wèn)錯(cuò)誤會(huì)被硬件和操作系統(tǒng)攔截,強(qiáng)制程序崩潰,程序員沒(méi)有挽救的機(jī)會(huì)。

CPU 訪問(wèn)內(nèi)存時(shí)需要的是地址,而不是變量名和函數(shù)名!變量名和函數(shù)名只是地址的一種助記符,當(dāng)源文件被編譯和鏈接成可執(zhí)行程序后,它們都會(huì)被替換成地址。編譯和鏈接過(guò)程的一項(xiàng)重要任務(wù)就是找到這些名稱所對(duì)應(yīng)的地址。

假設(shè)變量 a、b、c 在內(nèi)存中的地址分別是 0X1000、0X2000、0X3000,那么加法運(yùn)算c = a + b;將會(huì)被轉(zhuǎn)換成類似下面的形式:

0X3000 = (0X1000) + (0X2000);

( )表示取值操作,整個(gè)表達(dá)式的意思是,取出地址 0X1000 和 0X2000 上的值,將它們相加,把相加的結(jié)果賦值給地址為 0X3000 的內(nèi)存

變量名和函數(shù)名為我們提供了方便,讓我們?cè)诰帉懘a的過(guò)程中可以使用易于閱讀和理解的英文字符串,不用直接面對(duì)二進(jìn)制地址,那場(chǎng)景簡(jiǎn)直讓人崩潰。

需要注意的是,雖然變量名、函數(shù)名、字符串名和數(shù)組名在本質(zhì)上是一樣的,它們都是地址的助記符,但在編寫代碼的過(guò)程中,我們認(rèn)為變量名表示的是數(shù)據(jù)本身,而函數(shù)名、字符串名和數(shù)組名表示的是代碼塊或數(shù)據(jù)塊的首地址。

關(guān)于程序內(nèi)存、編譯鏈接、可執(zhí)行文件的結(jié)構(gòu)以及如何找到名稱對(duì)應(yīng)的地址,我們將在《C語(yǔ)言內(nèi)存》和《C語(yǔ)言模塊化開發(fā)》專題中深入探討。

 以上就是 對(duì)C語(yǔ)言的指針做了詳細(xì)介紹,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • C語(yǔ)言 fscanf 和 fprintf函數(shù)示例詳解

    C語(yǔ)言 fscanf 和 fprintf函數(shù)示例詳解

    這篇文章主要介紹了 C語(yǔ)言 fscanf 和 fprintf函數(shù)示例詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-12-12
  • VS編譯出現(xiàn)MSB3073命令的解決方案

    VS編譯出現(xiàn)MSB3073命令的解決方案

    =error MSB3073是Visual Studio編譯器報(bào)出的錯(cuò)誤,本文主要介紹了VS編譯出現(xiàn)MSB3073命令的解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • C++賦值運(yùn)算符

    C++賦值運(yùn)算符

    這篇文章主要介紹了C++賦值運(yùn)算符,C++當(dāng)中允許類對(duì)象賦值,這是通過(guò)默認(rèn)的重載賦值運(yùn)算符實(shí)現(xiàn)的,下面我們就來(lái)介紹介紹該內(nèi)容吧,,需要的朋友可以參考一下
    2022-01-01
  • c++命名對(duì)象和匿名對(duì)象的解析

    c++命名對(duì)象和匿名對(duì)象的解析

    像按值傳遞的對(duì)象(函數(shù)入?yún)?,函?shù)返回值)都是匿名對(duì)象,那匿名對(duì)象的特點(diǎn)是什么呢?下面通過(guò)實(shí)例代碼給大家解析c++命名對(duì)象和匿名對(duì)象的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-10-10
  • C語(yǔ)言實(shí)現(xiàn)出棧序列合法性判定

    C語(yǔ)言實(shí)現(xiàn)出棧序列合法性判定

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)出棧序列合法性判定,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 深入了解C語(yǔ)言字符函數(shù)和字符串函數(shù)

    深入了解C語(yǔ)言字符函數(shù)和字符串函數(shù)

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言字符/字符串的相關(guān)函數(shù),文中通過(guò)示例代碼總結(jié)的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語(yǔ)言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • C語(yǔ)言實(shí)現(xiàn)手寫紅黑樹的示例代碼

    C語(yǔ)言實(shí)現(xiàn)手寫紅黑樹的示例代碼

    紅黑樹在表意上就是一棵每個(gè)節(jié)點(diǎn)帶有顏色的二叉搜索樹,并通過(guò)對(duì)節(jié)點(diǎn)顏色的控制,使該二叉搜索樹達(dá)到盡量平衡的狀態(tài)。本文主將用C語(yǔ)言實(shí)現(xiàn)手寫紅黑樹,需要的可以參考一下
    2022-09-09
  • C++?vector與數(shù)組轉(zhuǎn)換寫入/讀出文件方式

    C++?vector與數(shù)組轉(zhuǎn)換寫入/讀出文件方式

    這篇文章主要介紹了C++?vector與數(shù)組轉(zhuǎn)換寫入/讀出文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語(yǔ)言實(shí)現(xiàn)解析csv格式文件的示例代碼

    C語(yǔ)言實(shí)現(xiàn)解析csv格式文件的示例代碼

    CSV,有時(shí)也稱為字符分隔值,其文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本),本文為大家整理了C語(yǔ)言解析csv文件的方法,需要的可以參考一下
    2023-06-06
  • VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲(chǔ)

    VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲(chǔ)

    本文主要介紹了VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲(chǔ),實(shí)現(xiàn)了視頻,拍照,保存這三個(gè)功能。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05

最新評(píng)論

古交市| 泰来县| 桂平市| 庆城县| 密山市| 鞍山市| 安龙县| 上杭县| 佛山市| 广宗县| 龙山县| 磐安县| 寿宁县| 井冈山市| 宣城市| 赣州市| 曲阳县| 汉阴县| 金塔县| 永修县| 舒兰市| 永平县| 十堰市| 海门市| 焉耆| 武隆县| 永春县| 乐陵市| 鲁山县| 弥勒县| 古浪县| 绥德县| 安平县| 柞水县| 南平市| 三台县| 丰城市| 巢湖市| 武川县| 洱源县| 中西区|