1. 在c語言中一個指針佔用多少位元組。
指針即為地址,指針幾個位元組跟語言無關,而是跟系統的定址能力有關。譬如以前是16為地址,指針即為2個位元組,現在一般是32位系統,所以是4個位元組,以後64位,則就為8個位元組。
(1)c語言指針對象大小擴展閱讀:
1)指針的含義
指針不同於一般變數,存的是變數的地址,在同一架構下地址長度都是相同的(cpu的最大定址內存空間),所以不同類型的指針長度都一樣比如說一個char1位元組,可以存在0x0,也可以位於0xFFFFFFFF,比如你的32位系統。
2)指針的范圍
指針長度為4,在64位操作系統下那麼就都是8了,而和char佔用1位元組還是100位元組無關,指針的范圍只和機器字和系統有關。
3)變化的范圍
如果你輸出的是444,說明指針長度為4位元組可以記錄的地址范圍是0x00000000~0xFFFFFFFF,這個范圍才是指針變數的值。
4)指針的介紹
指針是一個特殊的變數,它裡面存儲的數值被解釋成為內存里的一個地址。要搞清一個指針需要搞清指針的四方面的內容:指針的類型、指針所指向的類型、指針的值或者叫指針所指向的內存區、指針本身所佔據的內存區。
2. c語言關於指針比大小的問題,求解析
輸入2,3
輸入為:max=2,
min=3
注意:
swap(int
*p1,int
*p2){
int
*temp;
temp
=
p1;
p1
=
p2;
p2
=
temp;
}
函數參數p1,p2是形參(恰巧與main中的p1,
p2同名),swap只交換了參數p1,
p2的值,而沒有改變main中兩個變數p1,
p2!!
3. C語言指針變數大小的問題
對於這個你只要記住一句秘訣就好,指針的大小僅僅取決指針本身的大小,不取決於指針指向的大小。 還有就是還有一個虛擬內存和物理地址的關系,有MMU映射,8086里有硬體完成一個地址偏移的過程,物理地址 = 基址*16 + 變址。
4. c語言中指針佔多少個位元組
指針佔位元組數和編譯器有關.
如果是16位編譯器,那麼指針佔2位元組.
如果是32位編譯器,那麼指針佔4位元組
如果是64位編譯器 那麼指針佔8位元組.
即 指針位數和編譯器位數相同.
5. C語言的指針變數在內存中佔多少位元組
一個指針變數在內存中占兩個位元組(small模式編譯)
一個指針變數在內存中佔四個位元組(32位機器上)
一般都是32位機器的,所以四個位元組咯。
6. C語言 如何輸出指針所指向空間的大小
C語言無法輸出指針所指向的空間的大小!
一般,我們獲取一個變數所佔內存空間的方法為:sizeof(變數名或類型名),如:
inta;
intaa[10];
int*p=aa;
printf("sizeof(int)=%d ",sizeof(int));//現在的機器一般為32位或64位機,int類型佔四個位元組,所以輸出4
printf("sizeof(a)=%d ",sizeof(a));//輸出4
printf("sizeof(aa)=%d ",sizeof(aa));//輸出4*10=40
printf("sizeof(p)=%d ",sizeof(p));//輸出4?見下面說明
printf("sizeof(int*)=%d ",sizeof(int*));//輸出4?見下面說明
指針變數定義:用來存儲內存地址的變數。指針變數中存儲的是內存地址數據(一個整型數),而不是真正的數據,真正的數據是在地址中存放的。所以,指針變數實際上就是個整型變數,用sizeof命令去獲取任意類型的指針變數都會得到4。
指針變數存儲的是一個存儲空間的首地址,究竟這個空間有多大,可以存儲多少個數據,這是分配空間時所決定的。單獨看一個地址值,是看不出其空間大小的。如:
int a;
int aa[10];
int *p ; //定義一個指針變數
p=aa ; //指向數組aa,aa的數據空間是40位元組,10個整數
p=&a; //指向一個整型變數,它的存儲空間是4位元組,一個整數
7. C語言中,一個指針佔用的空間是多大和指針類型有關系嗎
指針和其指向的數據類型有關系,你可以用sizeof()來做測試:
printf("the
size
of
char
is
%d\n",sizeof(int*));
printf("the
size
of
char
is
%d\n",sizeof(char*));
另外,指向結構體的指針就要看具體情況了,C語言還有所謂的「對齊機制」,就是結構體里的單元,所分配的空間實際上要參照結構體里「體積」最大的那個單元。就是說,比如一個char和一個int,char要向int看齊,一個char和一個double,char要向double看齊。關鍵就在於湊整數,湊成最大變數大小的倍數。當然,如果結構體里只有char型的變數或是數組,就不存在一定要湊數的問題了。
8. C語言中指針的長度!
記住32位下的指針 都是4個位元組可以簡單的這么理解:一個基本的數據類型(包括結構體等自定義類型)加上「*」號就構成了一個指針類型的模子。這個模子的大小是一定的,與「*」號前面的數據類型無關。「*」號前面的數據類型只是說明指針所指向的內存里存儲的數據類型。所以,在 32位系統下,不管什麼樣的指針類型,其大小都為 4byte。
9. 【C語言】如何獲取含有指針的結構體的總大小
雖然你定義了結構體,但是不會為結構體的定義分配內存的,分配內存的是結構體的對象,或者說實例,因此,你能知道的是如果申明使用這個結構體會分配多少內存,只需要聲明一個對象,然後再查看這個對象的大小就能打到你的目的了:siziof(struct xx), xx就是你定義的結構體的一個對象
10. C語言里的指針怎麼比大小,都是地址到底誰大呀
本來就不存在誰大誰小,只有當指針是指向數組或字元串中元素時可以進行一些代數操作
如果是要比較指針指向的值的大小,請使用*操作符……但注意只有*p指向的數據類型可以比較才有效
此處是指向字元串的,大小就是p所指的元素(字元)在字元串中的前後順序