1樓:blackpink_羅捷
一個指標變數在記憶體中佔兩個位元組(**all模式編譯),一個指標變數在記憶體中佔四個位元組(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*()
2樓:哇哎西西
指標即為地址,指標幾個位元組跟語言無關,而是跟系統的定址能力有關。
比如以前是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 個位元組的長度。
3樓:舟
指標即為地址,它是一個
無符號整數(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語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。
4樓:匿名使用者
16位處理器可以一次性處理2個位元組的資料量,指標即為2個位元組;
32位處理器可以一次性處理4個位元組的資料量,所以是4個位元組;
64位處理器可以一次性處理8個位元組的資料量,所以是8個位元組。
指標是一個用來指示一個記憶體地址的計算機語言的變數或**處理器(cpu)中暫存器(register)。在使用一個指標時,一個程式既可以直接使用這個指標所儲存的記憶體地址,又可以使用這個地址裡儲存的函式的值。且一個位元組=8位。
5樓:千鋒教育
假設q指向int型別變數 (佔4個位元組)
假設r指向double型別變數 (佔8個位元組)sizeof(資料型別) 此運算子功能:返回值就是該資料型別所佔的位元組數。
sizeof(變數名) 此運算子功能:返回值就是該變數所佔的位元組數# include int main(void)執行結果:總結:任何型別的指標變數都是佔用4個位元組。
6樓:天雲一號
c語言規定一個指標佔4個位元組。
檢視指標所佔位元組數可以用sizeof( )函式進行測試。如:
char a = "abcdefgh";
char *p = a; // 定義一個指標變數,指向字元陣列aprintf("%d\n", sizeof(p)); // 輸出指標所佔的位元組數,輸出4
7樓:匿名使用者
指標佔用多少位元組,取決於所使用的編譯器版本,編譯器有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個位元組。
8樓:鬼火狼煙
指標長度和執行程式的作業系統是有關係的,lz的老師說是2在現在來說的確是錯誤的,一般編譯器會把指標的長度定義為系統的字長(這點lz應該堅持自己的想法呵呵),指標的長度在16位os比如dos上的確是2個位元組,但是在32位的windows上,就是4位,很多老版本的c教材都是2個位元組,這個不能籠統的說是錯了,而是有它的歷史原因在裡面.所以lz的老師應該多看看新版本的書籍了,教育應該和科技的發展接軌才可以呵呵~
c語言中指標佔多少個位元組
9樓:談雲德五姬
一個指標變數在記憶體中佔兩個位元組(**all模式編譯)
一個指標變數在記憶體中佔四個位元組(32位機器上)
一般都是32位機器的,所以四個位元組咯。
10樓:匿名使用者
指標佔位元組數和編譯器有關.
如果是16位編譯器,那麼指標佔2位元組.
如果是32位編譯器,那麼指標佔4位元組
如果是64位編譯器 那麼指標佔8位元組.
即 指標位數和編譯器位數相同.
11樓:六新蘭褒璧
在c語言中,無論指標指向的內容是什麼,指標總是佔4個位元組的。
c語言中一個指標佔用多少位元組
12樓:匿名使用者
指標即為地址,指標幾個位元組跟語言無關,而是跟系統的定址能力有關,譬如以前是16為地址,指標即為2個位元組,現在一般是32位系統,所以是4個位元組,以後64位,則就為8個位元組。
13樓:蒸蒸zh日上
借lz的問題,請教大家一個問題吧; 指標佔用的位元組數和指標的型別有關係嗎?謝謝哦~
c語言的指標變數在記憶體中佔多少位元組?
14樓:桐碧蓉龔罡
一個指標變數在記憶體中佔兩個位元組(**all模式編譯)
一個指標變數在記憶體中佔四個位元組(32位機器上)
一般都是32位機器的,所以四個位元組咯。
c語言中指標佔多少個位元組
15樓:貳玉蘭愛琴
四個位元組,32位的地址寬度,最大可以管理4gb的記憶體。
c語言中,指標變數為何只佔4位元組?
16樓:匿名使用者
首先要明白的是,指標變數是用來存地址的變數,也就是說,這個變數裡面存的內容是地址。
那麼開始解釋,cpu與記憶體進行直接互動時,cpu要獲得記憶體中的資料,就要知道這個資料在記憶體中所在的地址,那麼cpu就要在記憶體中定址。記憶體中的地址的基本單位為位元組,即一個位元組一個地址,32位cpu有32根地址匯流排,記憶體大小為2^32位元組,即4gb,也就是說,這4gb的記憶體中,每一位元組的記憶體空間都有自己的一個在記憶體中的地址。
重點來了,指標變數是用來存地址的,32位cpu中,要想指標能夠儲存這2^32次個地址,需要多大的空間呢?很明顯,4個位元組,即32位,32位的變數能表示的資料個數剛好為2^32個,能能夠把記憶體中的所有地址表示完全。
所以32位中,指標變數需要4位元組,以此內推其他位數cpu。
c語言中指標和引用的區別,C語言中指標和引用的區別
指標,全稱為指標變數,是用來儲存記憶體地址的一種變數。程式中,一般通過指標來訪問其指向的記憶體地址中的內容 資料 引用,是c 中提出來的一種新的使用變數的方式,即,給實際變數起個別名,通過這個別名來引用實際的變數。標準c中不支援變數的引用。這兩個概念沒有任何相關性。指標是實實在在的變數,有自己的記憶...
c中指標怎麼用,c語言中指標怎麼使用
int p 宣告一copy個指向int的指標pint a a 3 p a printf d p 列印a的地址printf d p 列印a的值 p 4 改變a的值。printf d a 列印a的值為4 推薦看書 c和指標 這裡最好的回答吧,指標可不是一天兩天能夠學會的 c語言中指標怎麼使用?1 使用場...
c語言中指標在程式設計中有什麼作用,C語言中指標在程式設計中有什麼作用?
指標,太有用了,也最難管理的,好處多的是,比如,函式傳遞,引數是結構時,傳指標可以提高效能 可以通過傳遞和儲存指標,通過資料的相對位置來訪問資料,而不用定義不同的n個變數來,分別使用。比如 int a 10 那麼用a 0 a 9 即可訪問裡面的10個資料,而只需要知道a的地址即可,操作方便,而且在函...