請問在C中TC3 0 指標變數在記憶體中佔幾個位元組

2021-04-20 06:48:47 字數 5384 閱讀 1368

1樓:匿名使用者

呵呵,指標指向的是邏輯位址。當構成實際位址的時候指標還要跟一定的段位址暫存器進行運算才能得出真實地位址。這些都是作業系統做的,你不需要關心這個。

2樓:進新

不同的計copy算機是不一樣的.

32位的是4個位元組,也就是現在用的最多的(64位快了...),16位就是2個位元組.

雖然是16位,不過他的定址方式不只是用指標,系統還要配合段繼存器(16位系統當然也是16的的繼存器了)來定址,合起來也就是4個位元組了.

現在的32位跟16的差不多,不過由於windows系統所有的資料段都使用乙個位址(人家可能認為32位夠用了吧),就不會涉及到段繼存器了.

當然象」zz003pm」說的位址轉換的問題我還不太清楚,可能是由硬體實現的,不記得了.

3樓:匿名使用者

4444

tc下輸出為22

22原因:一般bai來說

指標長度應該du與os的位數有關

32位操作zhi系統應該為4個位元組

以後dao64位作業系統應該為8個位元組

但在編譯環境中

指標長度是由編譯環境來設定的

由於tc是dos時代的產物

所以它還是2個位元組

vc自然是4個位元組

在c語言中乙個指標占用多少位元組。

4樓:blackpink_羅捷

乙個指標變數在記憶體中佔兩個位元組(small模式編譯),乙個指標變數在記憶體中佔四個位元組(32位機器上),一般都是32位機器的,所以四個位元組咯。

指標即為位址,指標幾個位元組跟語言無關,而是跟系統的定址能力有關。

指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容:指標的型別、指標所指向的型別、指標的值或者叫指標所指向的記憶體區、指標本身所佔據的記憶體區。

擴充套件資料

1、指標的型別

從語法的角度看,你只要把指標宣告語句裡的指標名字去掉,剩下的部分就是這個指標的型別。這是指標本身所具有的型別。讓我們看看例一中各個指標的型別:

(1)int*ptr;//指標的型別是int*

(2)char*ptr;//指標的型別是char*

(3)int**ptr;//指標的型別是int**

(4)int(*ptr);//指標的型別是int(*)

(5)int*(*ptr);//指標的型別是int*(*)

2、指標所指向的型別

當你通過指標來訪問指標所指向的記憶體區時,指標所指向的型別決定了編譯器將把那片記憶體區里的內容當做什麼來看待。

從語法上看,你只須把指標宣告語句中的指標名字和名字左邊的指標宣告符*去掉,剩下的就是指標所指向的型別。例如:

(1)int*ptr; //指標所指向的型別是int

(2)char*ptr; //指標所指向的的型別是char

(3)int**ptr; //指標所指向的的型別是int*

(4)int(*ptr); //指標所指向的的型別是int()

(5)int*(*ptr); //指標所指向的的型別是int*()

5樓:哇哎西西

指標即為位址,指標幾個位元組跟語言無關,而是跟系統的定址能力有關。

比如以前是16位系統,指標即為2個位元組,現在一般是32位系統,所以是4個位元組。

指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容:指標的型別、指標所指向的型別、指標的值或者叫指標所指向的記憶體區、指標本身所佔據的記憶體區。

擴充套件資料:

1、指標的型別

從語法的角度看,你只要把指標宣告語句裡的指標名字去掉,剩下的部分就是這個指標的型別。這是指標本身所具有的型別。讓我們看看例一中各個指標的型別:

(1)int*ptr;//指標的型別是int*

(2)char*ptr;//指標的型別是char*

(3)int**ptr;//指標的型別是int**

(4)int(*ptr)[3];//指標的型別是int(*)[3]

(5)int*(*ptr)[4];//指標的型別是int*(*)[4]

2、指標所指向的型別

當你通過指標來訪問指標所指向的記憶體區時,指標所指向的型別決定了編譯器將把那片記憶體區里的內容當做什麼來看待。

從語法上看,你只須把指標宣告語句中的指標名字和名字左邊的指標宣告符*去掉,剩下的就是指標所指向的型別。例如:

(1)int*ptr; //指標所指向的型別是int

(2)char*ptr; //指標所指向的的型別是char

(3)int**ptr; //指標所指向的的型別是int*

(4)int(*ptr)[3]; //指標所指向的的型別是int()[3]

(5)int*(*ptr)[4]; //指標所指向的的型別是int*()[4]

3、指標的值或者叫指標所指向的記憶體區或位址

指標的值是指標本身儲存的數值,這個值將被編譯器當作乙個位址,而不是乙個一般的數值。在32 位程式裡,所有型別的指標的值都是乙個32 位整數,因為32 位程式裡記憶體位址全都是32 位長。

指標所指向的記憶體區就是從指標的值所代表的那個記憶體位址開始,長度為sizeof(指標所指向的型別)的一片記憶體區。以後,我們說乙個指標的值是xx,就相當於說該指標指向了以xx 為首位址的一片記憶體區域。

我們說乙個指標指向了某塊記憶體區域,就相當於說該指標的值是這塊記憶體區域的首位址。指標所指向的記憶體區和指標所指向的型別是兩個完全不同的概念。在例一中,指標所指向的型別已經有了,但由於指標還未初始化,所以它所指向的記憶體區是不存在的,或者說是無意義的。

4、指標本身所佔據的記憶體區

在32 位平台裡,指標本身佔據了4 個位元組的長度。

6樓:舟

指標即為位址,它是乙個

無符號整數(unsigned int),

它是乙個以當前系統定址範圍為取值範圍的整數。

指標幾個位元組跟語言無關,而是跟系統的定址能力有關。

譬如以前是16為位址,指標即為2個位元組,

現在一般是32位系統,所以是4個位元組,

以後64位,則就為8個位元組。

擴充套件資料:1、在64位機器中:

char型別佔1個位元組,short型別佔2個位元組int型別佔4個位元組,long型別佔4個位元組unsigned int型別佔4個位元組,float型別佔4個位元組double型別佔8個位元組。long double型別佔12個位元組2、記憶體分配表

計算機中的記憶體都是編址的,就像你家的位址一樣。在程式編譯或者執行的時候,系統(可以不關心具體是什麼,可能是編譯器,也可能是作業系統)開闢了一張表。每遇到一次宣告語句(包括函式的傳入引數的宣告)都會開闢乙個記憶體空間,並在表中增加一行紀錄。

記載著一些對應關係。

3、c語言

c語言是一門通用計算機程式語言,廣泛應用於底層開發。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

7樓:匿名使用者

16位處理器可以一次性處理2個位元組的資料量,指標即為2個位元組;

32位處理器可以一次性處理4個位元組的資料量,所以是4個位元組;

64位處理器可以一次性處理8個位元組的資料量,所以是8個位元組。

指標是乙個用來指示乙個記憶體位址的計算機語言的變數或**處理器(cpu)中暫存器(register)。在使用乙個指標時,乙個程式既可以直接使用這個指標所儲存的記憶體位址,又可以使用這個位址裡儲存的函式的值。且乙個位元組=8位。

8樓:千鋒教育

假設q指向int型別變數 (佔4個位元組)

假設r指向double型別變數 (佔8個位元組)sizeof(資料型別) 此運算子功能:返回值就是該資料型別所佔的位元組數。

sizeof(變數名) 此運算子功能:返回值就是該變數所佔的位元組數# include int main(void)執行結果:總結:任何型別的指標變數都是占用4個位元組。

9樓:天雲一號

c語言規定乙個指標佔4個位元組。

檢視指標所佔位元組數可以用sizeof( )函式進行測試。如:

char a = "abcdefgh";

char *p = a;  // 定義乙個指標變數,指向字元陣列aprintf("%d\n", sizeof(p));  // 輸出指標所佔的位元組數,輸出4

10樓:匿名使用者

指標占用多少位元組,取決於所使用的編譯器版本,編譯器有16位、32位、64位之分,16位和32位編譯器可以執行在32位作業系統上,而64位作業系統可以執行這三種編譯器。

16位編譯器下,乙個指標占用2位元組;32位編譯器下,乙個指標占用4位元組;64位下,乙個指標占用8位元組。

當前(2023年1月)國內大部分電腦已經使用上了64位windows作業系統,但visual studio等程式設計軟體預設使用的編譯器是32位編譯器,因此最常見的情況是乙個指標占用 4 個byte。

蘋果的macos系統自帶clang編譯器,預設是64位,因此通常在蘋果電腦上編寫c語言程式時,指標占用8個位元組。

11樓:鬼火狼煙

指標長度和執行程式的作業系統是有關係的,lz的老師說是2在現在來說的確是錯誤的,一般編譯器會把指標的長度定義為系統的字長(這點lz應該堅持自己的想法呵呵),指標的長度在16位os比如dos上的確是2個位元組,但是在32位的windows上,就是4位,很多老版本的c教材都是2個位元組,這個不能籠統的說是錯了,而是有它的歷史原因在裡面.所以lz的老師應該多看看新版本的書籍了,教育應該和科技的發展接軌才可以呵呵~

c語言裡指標指不論指向任何變數它自身都只佔4個位元組為什麼?

12樓:匿名使用者

指標存放復的是記憶體地制址.

記憶體位址多少位,是由編譯器決定的.

編譯器如果是32位的,那麼位址就是4位元組.

如果是64位的,那麼就是八字節.

不會因為存放資料型別的不同而變化.

就像家裡的門牌號, 不管家裡住多少人, 是別墅還是平房, 門牌號都是街道統一規定的.

13樓:迷迷惘惘的娃兒

指標存放的是乙個記憶體位址,32位系統中乙個位址的長度為32位,所以乙個指標的大小也是32位,即4位元組

14樓:匿名使用者

對啊bai

指標是存放位址用滴。du。

打個比方,zhi

你要寄一封信,dao得寫郵政編碼吧。。內

15樓:匿名使用者

指標自己也是乙個變數 只不過這個變數代表著一塊記憶體位址。

因為32位系統位址寬度為4個位元組。為了表示位址,指標長度就是32位

systemdirbgtdirtt在c中的意思

如果是 xp系統 會將 目錄 c documents and settings administrator 下 的資料夾 使用空格式寫入到 c documents and settings administrator dir.txt 裡面 system裡面的就是dos命令 dir b dir.txt...

在c中是什麼意思在C中是什麼意思

表示作用域,和所屬關係。比如乙個a類 存在乙個函式test是屬於a的,如下 關於 的具體解析 是運算子中等級最高的,它分為三種 1 global scope 全域性作用域符 用法 name 2 class scope 類作用域符 用法 class name 3 namespace scope 命名空...

請問在c語言中for迴圈語句表示式1中能否定義變數?如果可以它的作用域又是什麼

標準c語言,變數聲 明必須在語句之前,for 小括號中宣告 定義變數是語法錯誤。for int i 0 i錯誤。標準c語言,每對花括號之間為乙個域,每個域中可以宣告 定義變數,它的作用域就是花括號之間。花括號套花括號,則外域量 可以作用到 內域,除非 內域 宣告了 同名 變數。int i for i...