Ⅰ 定義結構體類型,說明了該類結構體數據的組織形式,在編譯程序時系統會給結構體類型分配空間。 為什麼
結構體類型是一種類型就和整型一樣,你沒有創建變數,舉個例子
int;這是一種類型這個不佔
int a;這是一個變數占內存
就和你說男的一樣,你只是說了男的,你沒有指明是誰呀
所以,只不過這個類型是你自己定義,
Ⅱ 定義結構體指針時,有沒有同時分配存儲空間
定義結構體指針時,只會在棧中分配指針大小的空間給這個指針存放地址,一般也就是4個位元組。你要是說的是會不會為結構體分配內存空間,那是肯定不會的,為結構體申請分配空間要用malloc或new在堆中申請,並將申請的內存首地址返回給結構體指針。
Ⅲ C++中2道結構方面選擇題,詳細解釋一下 當定義一個結構體變數時,系統為它分配的內存空間是
分配的內存空間為 12
32位且4位元組對齊時佔用的位元組數為12位元組。
16位2位元組對齊時佔用的位元組數為6位元組。源代碼如下:
#include<stdio.h>structs{inta;charb;floatc;};voidmain(){printf("%d ",sizeof(structs));}運行結果如下
(3)在定義結構體類型時就給結構體分配存儲空間擴展閱讀:
結構體的內存空間對齊規則
1、數據成員對齊規則:結構(struct)(或聯合(union))的數據成員,第一個數據成員放在offset為0的地方。以後每個數據成員的對齊按照#pragma pack指定的數值和這個數據成員自身長度中,比較小的那個進行。
2、結構(或聯合)的整體對齊規則:在數據成員完成各自對齊之後,結構(或聯合)本身也要進行對齊,對齊將按照#pragma pack指定的數值和結構(或聯合)最大數據成員長度中,比較小的那個進行。
3、結合1、2可推斷:當#pragma pack的n值等於或超過所有數據成員長度的時候,這個n值的大小將不產生任何效果。
Ⅳ 當定義一個結構體變數時系統為它分配的內存空間是
A、各成員所需內存量的總和
當定義一個結構體變數時系統分配給它的內存是各成員所需內存量的總和。本題主要考查的知識點為結構型變數所佔用內存空間。當定義了結構型變數時,需要給其分配內存,分配內存的位元組數等於該結構型所有成員佔用的位元組數之和。因此,當定義一個結構體變數時系統分配給它的內存是各成員所需內存量的總和。
(4)在定義結構體類型時就給結構體分配存儲空間擴展閱讀:
C++提供了許多種基本的數據類型(如int、float、double、char等)供用戶使用。但是由於程序需要處理的問題往往比較復雜,而且呈多樣化,已有的數據類型顯得不能滿足使用要求。因此C++允許用戶根據需要自己聲明一些類型,用戶可以自己聲明的類型還有結構體類型(structure)、共用體類型(union)、枚舉類型(enumeration)、類類型(class )等,這些統稱為用戶自定義類型(user-defined type,UDT)。
Ⅳ c語言數據結構的表示(儲存結構)用類型定義(typedef)描述怎樣分配空間
typdef 定義結構體,所得變數存儲結構與結構體是一樣的。
typedef stuct stxx{
char i;
int j;
}defxx;
defxx xx;//定義變數
struct styy{
char i;
int j;
}yy;
xx 和yy的存儲結構完全一樣。
而結構體的存儲結構則與你的機器字長,編譯器類型和編譯的參數設置有關。
如你使用的編譯器支持位元組對齊,並且你設定了位元組對齊,那你定義的變數就是按照位元組一個挨著一個,如果你沒有設置位元組對齊,那每個變數的存儲空間就是結構體裡面最長的那個成員所佔的空間。
Ⅵ C語言中,結構一旦定義,系統就給它分配所需的內存單元對嗎
不是這樣的。結構體的定義只是定義了這種結構體的格式,我並沒有分配相應的內存單元。只有當聲明這一類型的變數時,才為這些變數分配存儲空間。
Ⅶ 定義結構體時,結構體本身並不佔用存儲空間,系統並不給結構體分配存儲空間,這句話對嗎
不正確。
定義結構體時,系統按照各成員項的大小分配相應的存儲空間。