C 宣告變數佔不佔儲存空間,C 宣告變數佔不佔儲存空間

2022-03-09 02:28:09 字數 2504 閱讀 4610

1樓:匿名使用者

宣告總要對應定義的,如果你宣告瞭,而沒有定義,那麼,你的宣告還有什麼意義?

所以,兩本書說的都可以算對的

你可以假設你宣告的時候沒有分配儲存空間

那麼,你定義的時候,就肯定是佔用了儲存空間的

2樓:可愛的小知道

我認為前面教材準確.

定義也可以是宣告。如果該編譯器"還沒有"看到過名字a ,程式設計師定義int a ,則編譯器馬上為這個名字分配儲存地址。

-----教材後者可能說的是在此情形下的宣告.

3樓:

看具體情況。

宣告是對一個變數的性質加以說明,並不為其分配儲存空間。例如結構宣告。c中常有:

typedef struct color_table color_table; // 不分配

color_table c_tab01, c_tab02; // 分配

函式(子程式)裡宣告的變數(叫區域性量),只由當呼叫子程式時才分配,退出子程式就取消。

主程式中變數宣告,例如:int i,j,k; float a[10]; 宣告的同時也就分配了。

4樓:匿名使用者

在c中,可以使用extern來宣告全域性變數。這個宣告可以在多個檔案中使用。但是全域性變數只能在一個檔案中定義。

5樓:關禕

對於c++ 宣告肯定是沒有空間的。

而對於定義,則一般由空間,除了定義的特殊類。

如:class empty

}這個類的定義就沒有空間的。

6樓:

佔用,你定義的時候記憶體就會分配空間.

c++ 中的變數一定會佔用記憶體空間嗎

7樓:匿名使用者

函式區域性變數,沒進入函式時就不佔空間

8樓:匿名使用者

被優化的儲存在暫存器裡面,不佔用記憶體空間

其餘所有變數都是儲存在記憶體中的,都要佔用記憶體空間。

宣告一個變數佔空間嗎?

c++中為什麼變數的宣告順序不同所佔用的總記憶體就不同

9樓:匿名使用者

這個和位元組填充有關, 假設記憶體每行能夠儲存4個位元組的資料(從你說的情況看, 應該是每行存4個位元組),當每行的後面不足以存放下一個變數時,則將這個變數存到下一行中, 而上一行中空的位元組以0填充...

int型別佔4個位元組,bool型別一個位元組

則第一種儲存順序下,第一行正好放下int(4位元組),然後將兩個bool型別的變數存到第二行中(實際只佔了2個位元組,但是後面的被填充了)所以這種情況下總的大小事8個位元組...

第二種情況下, 第一行先存bool,佔一個位元組,這行的後面還有三個位元組, 在存int時,發現後面的存不下了,於是存到下一行,上一行後面的三個位元組就被填充掉了, 在存最後一個 bool時有新起了 一行,所以這種情況下總的大小是12位元組...

(上面說的不完全準確, 但對於你理解這題完全夠了,就是個位元組填充的問題)

10樓:匿名使用者

這跟記憶體的佈局有關的。在計算機中在對記憶體讀寫的時候如果記憶體對齊的話速度會比較快。

而位元組大小是不一樣的,為了達到對齊的目的,計算機就會在成員之間填充位元組,這樣最後的結果就是佔用記憶體變大了。

你也可以禁止這種優化

使用這個#pragma pack()

11樓:匿名使用者

bool就是這樣,幾種不同型別的變數組合成一個整體的時候,bool型別的變數放在一起佔用的記憶體空間就小

你可以定義一個class:

你sizeof看一下,你會發現這個也是佔用8位元組在int後的4個位元組空間裡你放一個bool或者放四個bool,整個class所佔的記憶體空間是一樣的。

如果你把int改成double

佔用空間變成16位元組了,一樣的道理

c++中定義一個引用變數,如:int& a = b;,此時定義的這個引用變數a要不要佔用空間?

12樓:匿名使用者

宣告一個引用,不是新定義了一個變數,它只表示該引用名是目標變數名的一個別名,它本身不是一種資料型別,因此引用本身不佔儲存單元,系統也不給引用分配儲存單元。故:對引用求地址,就是對目標變數求地址。

&ra與&a相等。

13樓:匿名使用者

a是引用,是不佔空間的,它只是一個名字,代表原來的的變數,對引用操作,就是對原變數操作,張三叫張立,但張三和張立的本體只有一個.只是兩個名字而已.而指標不同,指標是儲存地址的變數.

所以經常用開啟門的鑰匙來比喻指標.開啟門可以看到變數,但鑰匙雖然小,但也是一個實體.

14樓:plu二龍專用

理論上,引用應該相當於別名,不佔用任何空間實際上,

c++在實現這個操作的時候會建立常指標來指向對應的值因此建立引用會佔用等同於指標的空間

c語言外部函式宣告與否問題,C語言函式宣告是要在主函式內部還是外部啊?

絕對是會的,每一個函式都有入口,作業系統 os 需要計算地址並且定址,然後每個子函式都有一個返回值,執行完os仍然有計算和定址,然後返回main,不過這種時間花費很小,並不比一次inta b c的運算多多少,因此不會犧牲很多時間,另外,這種微小時間的付出換來的確實程式的模組化和有序化,顯然是非常值得...

C宣告指標空間問題 int p new int 10 與int p new int

int p new int 10 開闢一個指標p p指的內容是一個整型,值為10 int p new int 10 開闢一個長為10的陣列,預設每個值都是0,p指向array的開頭 int p new int int p new int 10 int p new int 10 這三個有什麼區別,什麼...

C語言 函式宣告前extern的用法?

1 別的就是指 這一個 以外的 c盤定義,d盤呼叫,原則上可以,但是麻煩,寫程式應該越簡單越好,不提倡這樣做 別的 原則上沒有限定幾層,但是最好放在同一個資料夾,原因也說了,分開放麻煩。2 作用相同,不完全等價。區別在哪呢?include h int f 把 h 裡的所有東西都搬過來 除了f 之外可...