欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

C 語言指針概念的詳解

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次

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

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

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

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

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

運行結(jié)果:

0X28FF3C, 0X28FF10

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

一切都是地址

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

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

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

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

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

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

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

變量名和函數(shù)名為我們提供了方便,讓我們在編寫代碼的過程中可以使用易于閱讀和理解的英文字符串,不用直接面對二進制地址,那場景簡直讓人崩潰。

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

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

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

上一篇:C語言 結(jié)構(gòu)體數(shù)組詳解及示例代碼

欄    目:C語言

下一篇:C語言 枚舉類型(Enum)詳解及示例代碼

本文標(biāo)題:C 語言指針概念的詳解

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2085.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有