c語言中指標佔多少個位元組,在C語言中一個指標佔用多少位元組。

2021-04-20 06:48:46 字數 5558 閱讀 3906

1樓:談雲德五姬

一個指標變數在記憶體中佔兩個位元組(small模式編譯)

一個指標變數在記憶體中佔四個位元組(32位機器上)

一般都是32位機器的,所以四個位元組咯。

2樓:匿名使用者

指標佔位元組數和編譯器有關.

如果是16位編譯器,那麼指標佔2位元組.

如果是32位編譯器,那麼指標佔4位元組

如果是64位編譯器 那麼指標佔8位元組.

即 指標位數和編譯器位數相同.

3樓:六新蘭褒璧

在c語言中,無論指標指向的內容是什麼,指標總是佔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語言中指標佔多少個位元組

12樓:貳玉蘭愛琴

四個位元組,32位的地址寬度,最大可以管理4gb的記憶體。

c語言中一個指標佔用多少位元組

13樓:匿名使用者

指標即為地址,指標幾個位元組跟語言無關,而是跟系統的定址能力有關,譬如以前是16為地址,指標即為2個位元組,現在一般是32位系統,所以是4個位元組,以後64位,則就為8個位元組。

14樓:蒸蒸zh日上

借lz的問題,請教大家一個問題吧; 指標佔用的位元組數和指標的型別有關係嗎?謝謝哦~

c語言中,指標變數為何只佔4位元組?

15樓:匿名使用者

首先要明白的是,指標變數是用來存地址的變數,也就是說,這個變數裡面存的內容是地址。

那麼開始解釋,cpu與記憶體進行直接互動時,cpu要獲得記憶體中的資料,就要知道這個資料在記憶體中所在的地址,那麼cpu就要在記憶體中定址。記憶體中的地址的基本單位為位元組,即一個位元組一個地址,32位cpu有32根地址匯流排,記憶體大小為2^32位元組,即4gb,也就是說,這4gb的記憶體中,每一位元組的記憶體空間都有自己的一個在記憶體中的地址。

重點來了,指標變數是用來存地址的,32位cpu中,要想指標能夠儲存這2^32次個地址,需要多大的空間呢?很明顯,4個位元組,即32位,32位的變數能表示的資料個數剛好為2^32個,能能夠把記憶體中的所有地址表示完全。

所以32位中,指標變數需要4位元組,以此內推其他位數cpu。

16樓:文化廚子

在c語言中,一般認為記憶體是一個大的位元組

陣列,基本單位是位元組,每一個位元組包含一個地址,有多少個地址,是有cpu的地址匯流排位數決定的,所有的地址一般稱作地址空間,比如32位的cpu,地址匯流排的位數是32位,它可描述的地址空間為0x0000 0000 0000 0000 ~ 2^32 - 1,正是因為此,所以在32位的系統上,一般指標佔4個位元組,如果是64位系統,它可描述的地址空間為0~2^64-1,如果是64位的編譯器,指標佔8個位元組。

C語言AB t 101f n佔多少個位元組

裡面包含了轉移字元,有ab t 製表符 101 三位八進位制數 f n 換行 反斜槓 共7個位元組。如果作為字串,後面還有 0 ab t 101f n 共7個字元,佔7位元組 請問c語言中,n 是佔用幾個位元組的?n 是兩來 個位元組。1 如果是源char 型,那麼是佔用1個位元組,8位。如果是st...

c語言中指標的作用是什麼C語言中指標的作用是什麼?

指標指向地址,指標的特性就是在地址不變的情況下,可以很方便的修改所指向的內容 最重要的應用有兩個,一是函式引數,二是函式指標函式引數 函式返回值只有一個,如果想回傳多個引數,則必須使用指標函式指標 典型應用就是 函式 callback 簡單地說指標就是指向變數和物件的地址。指標的用途非常廣泛,比如如...

這些C語言指標分別是什麼意思C語言中指標和指標變數的區別是什麼??

都是看與p結合的優先順序 1 p是個陣列,p是含有3個元素的陣列,每個元素都是int指標 2 p是個指標,指向一個 只有3個元素的陣列 的指標。3 p是個函式名 即p是函式 只有一個int引數,返回值為int指標 4 p是個函式指標,指向 只有一個int引數,返回值為int 的函式。5 p是個函式指...