⑴ 一個指針佔用幾個位元組
一個指針變數在內存中占兩個位元組(small模式編譯),一個指針變數在內存中佔四個位元組(32位機器上),一般都是32位機器的,所以四個位元組咯。
指針是一個特殊的變數,它裡面存儲的數值被解釋成為內存里的一個地址。要搞清一個指針需要搞清指針的四方面的內容:指針的類型、指針所指向的類型、指針的值或者叫指針所指向的內存區、指針本身所佔據的內存區。
(1)指針是否佔用存儲空間擴展閱讀:
使用指針來讀取數據,在重復性操作的狀況下,可以明顯改善程序性能,例如在遍歷字元串,查取表格,控製表格及樹狀結構上。對指針進行復制,之後再解引用指針以取出數據,無論在時間或空間上,都比直接復制及訪問數據本身來的經濟快速。
指針的機制比較簡單,其功能可以被集中重新實現成更抽象化的引用(reference)數據形別。許多編程語言中都支持某種形式的指針,最著名的是C語言,但是有些編程語言對指針的運用採取比較嚴格的限制,如Java一般避免用指針,改為使用引用。
⑵ 指針自身是不是不佔用內存空間
問1:指針是一種數據類型,它指向其他變數的地址,不管它指向什麼變數,用sizeof()測它的長度為四個位元組(windows操作系統下),因為他存放的是地址(地址全是整數),遵循先定義後使用的原則,定義( int *p; )時不分配內存空間,當其賦值(p=&n)時分配內存空間(即變數n的地址),不存在「整形變數里的內存空間」這個學法;問2:哈哈,已在問一回答了。
⑶ 指針不時佔用8個位元組的存儲空間么我的我什麼現實9位
相差9是因為你有的數組長度不是偶數,編譯器選擇對齊,留下一個位元組的空
指針變數的長度是8,必須放在能被8整除的地址,尾數只有兩種選擇,要麼是0,要麼是8
而字元數組可以從任何地址開始,因為每個元素都是char,是1對齊的。
你從這段代碼的執行結果判斷指針9個位元組,是假設指針變數p和數組abc在內存中連續排列的,中間沒有留空,不過這不是事實。
⑷ C語言中指針占物理內存空間嗎
根據不同平台占的不一樣,Ubuntu 64bit 上佔8個位元組。可以用這個方法看, int *i; printf("%d\n",sizeof(i));
⑸ C基礎問題,空指針占內存么
你說NULL嗎,NULL編譯時就解析成0放在代碼里。
至於 pointer * p;
不管p = NULL還是其他的,p都占空間
⑹ 在C語言中一個指針佔用多少位元組。
指針即為地址,指針幾個位元組跟語言無關,而是跟系統的定址能力有關。譬如以前是16為地址,指針即為2個位元組,現在一般是32位系統,所以是4個位元組,以後64位,則就為8個位元組。
(6)指針是否佔用存儲空間擴展閱讀:
1)指針的含義
指針不同於一般變數,存的是變數的地址,在同一架構下地址長度都是相同的(cpu的最大定址內存空間),所以不同類型的指針長度都一樣比如說一個char1位元組,可以存在0x0,也可以位於0xFFFFFFFF,比如你的32位系統。
2)指針的范圍
指針長度為4,在64位操作系統下那麼就都是8了,而和char佔用1位元組還是100位元組無關,指針的范圍只和機器字和系統有關。
3)變化的范圍
如果你輸出的是444,說明指針長度為4位元組可以記錄的地址范圍是0x00000000~0xFFFFFFFF,這個范圍才是指針變數的值。
4)指針的介紹
指針是一個特殊的變數,它裡面存儲的數值被解釋成為內存里的一個地址。要搞清一個指針需要搞清指針的四方面的內容:指針的類型、指針所指向的類型、指針的值或者叫指針所指向的內存區、指針本身所佔據的內存區。
⑺ 指針的作用是什麼啊
第一,指針的使用使得不同區域的代碼可以輕易的共享內存數據。當然小夥伴們也可以通過數據的復制達到相同的效果,但是這樣往往效率不太好。因為諸如結構體等大型數據,佔用的位元組數多,復制很消耗性能。
但使用指針就可以很好的避免這個問題,因為任何類型的指針佔用的位元組數都是一樣的(根據平台不同,有4位元組或者8位元組或者其他可能)。
第二,指針使得一些復雜的鏈接性的數據結構的構建成為可能,比如鏈表,鏈式二叉樹等等。
第三,有些操作必須使用指針。如操作申請的堆內存。還有:C語言中的一切函數調用中,值傳遞都是「按值傳遞」的。如果要在函數中修改被傳遞過來的對象,就必須通過這個對象的指針來完成。
(7)指針是否佔用存儲空間擴展閱讀
指針的表現形式是地址,核心是指向關系指針運算符「*」的作用是按照指向關系訪問所指向的對象.如果存在A指向B的指向關系,則A是B的地址,「*A」表示通過這個指向關系間接訪問B。
如果B的值也是一個指針,它指向C,則B是C的地址,「*B」表示間接訪問C如果C是整型、實型或者結構體等類型的變數或者是存放這些類型的數據的數組元素,則B(即C的地址)是普通的指針,稱為一級指針,用於存放一級指針的變數稱為一級指針變數。
⑻ 指針數組在內存中所佔的空間怎麼算
用 sizeof 計算。一個指針 4個位元組。
float (*a1)[3]; 一個指針 指向有3個元素的數組。 4個位元組
char (*a4)[3]; 一個指針 指向有3個元素的數組。 4個位元組
float *a2[3]; 指針數組,有3個 指針。 12個位元組。
char *a5[3]; 指針數組,有3個 指針。 12個位元組。
float a3[3]; float 數組,有3個元素,sizeof(float) * 3 = 12 個位元組
char a6[3]; char 數組,有3個元素,sizeof(char) * 3 = 3 個位元組.
⑼ 指針占不佔內存指針變數呢好糊塗啊。。。
指針是變數,佔有內存,它的內容是它指向內容的地址,訪問的時候先讀取它的內容,也就是另一段內存的地址。如果分不太清楚的話,可以仔細看下《c primer plus》比較基礎的,希望能幫到你,謝謝。
⑽ 指針類型對象佔用內存多少位元組存儲空間啊
一個機器字的長度
這意味著在16位cpu上是16位 = 2位元組
32位cpu上是32位 = 4位元組
64位上就是64位也就是8位元組了
通常情況是這樣,不過根據編譯器和系統架構的不同這也不是絕對