有關sizeof和malloc的問題

2022-06-03 08:55:12 字數 5252 閱讀 1595

1樓:匿名使用者

1. malloc需要一個正整數作為引數,當然可以用sizeof計算,但與new int不一樣,malloc返回的是void*,new int[n]申請的空間是4*n個位元組,返回int*

2.(int *)malloc(100) 確實就是記憶體100個位元組的意思

3.sizeof(3)等於4是因為3是int型,與具體數值無關。

2樓:匿名使用者

malloc 和new 的區別:

1、new 是c++中的操作符,malloc是c 中的一個函式

2、new 不止是分配記憶體,而且會呼叫類的建構函式,同理delete會呼叫類的解構函式,而malloc則只分配記憶體,不會進行初始化類成員的工作,同樣free也不會呼叫解構函式

3、記憶體洩漏對於malloc或者new都可以檢查出來的,區別在於new可以指明是那個檔案的那一行,而malloc沒有這些資訊。

4、new 和 malloc效率比較

new可以認為是malloc加建構函式的執行。

new出來的指標是直接帶型別資訊的。

而malloc返回的都是void指標。

sizeof函式:

sizeof操作符的結果型別是size_t,它在標頭檔案中typedef為unsigned int型別。

該型別保證能容納實現所建立的最大物件的位元組大小。它是計算一個型別或者結構的位元組長度

3樓:匿名使用者

malloc可以用sizeof計算他的值 是不是與 new int[ ]一樣這句話沒看懂

(int *)malloc(100)就是分配了100個記憶體

sizeof(3) 是等於3*4等於12 因為int為4啊

4樓:匿名使用者

malloc分配的空間大小不能用sizeof計算,sizeof()計算變數對應的型別中記憶體中佔用的空間位元組數量。

(int *)malloc(100) 是分配100個位元組的連續空間,返回這段空間的首地址並將地址轉換為int地址

sizeof(3)等價於sizeof(int),c語言中,整形常量預設為int型別,浮點數常量預設為double型別。

5樓:匿名使用者

malloc函式返回的只是一個指標,用sizeof計算也就是指標的大小4.。。。。。

new 是c++中的操作符,malloc是c 中的一個函式,new可以認為是malloc加建構函式的執行

(int*)malloc(100)確實是分配了一段100b的動態記憶體,但是返回的只是一個指向這片記憶體開始位置的整形指標

sizeof(3) 要看3是什麼型別了,int?long int?unsigned int?。。。。。。不同的情況這個值也不同

6樓:

1, malloc(100); 就是劃分100個記憶體位元組。

2,sizeof()用於返回某個型別,或者某個變數的,或者某個常量所佔記憶體的大小。

sizeof(3),因為3是int型,所以它等於4

c語言malloc和sizeof有什麼作用

7樓:匿名使用者

前者用於動態申請儲存空間,後者返回型別寬度

8樓:東風冷雪

malloc 分配記憶體的函式,sizeof 測量位元組

int *p;

p=int * malloc(sizeof(int));

c語言高手進 int * p = (int *)malloc(sizeof(int));

9樓:手機使用者

義例項實際上是指標陣列的定義。

指標陣列是指所定義陣列的每個陣列元素都是一個相應資料型別的指標,開設空間的操作可以應用迴圈語句進行,例如:對於char *p[10]; 可以應用

for(i=0;i<10;i++)

p[i]=(char *)malloc(sizeof(char)*n); //為每個指標申請開設n字元的儲存空間

開設後,對於p的使用與二維陣列的使用格式類似,可以有效的使用兩個下標,

如 p[0][0]='a';

還可以像每個指標中賦值字串: p[2]="beijing"; 當然字串長度應該小於n。

而陣列指標,是指定義為指向某個固定大小順序空間的指標,定義的格式如下:

char (*pa)[10]; //定義一個指向擁有10元素的字元陣列的指標,

int (*p)[10];

應用格式可以參考下述程式,申請空間、賦值、輸出後,可以觀察到100被賦值到第五行第十個元素,指標可以像二維陣列一樣通過兩個下標引用所申請開設的空間。

#include

main()}

10樓:樂跑小子

int *p;//定義一個指向整型的指標變數p=(int*)malloc(sizeof(int));

/*建立(動態申請)一塊記憶體空間,建立的記憶體空間為一個整型變數的長度,並把建立的空間地址轉化成指向整型的指標賦值給前面的整型指標變數p*/

如果這塊動態記憶體不釋放,相當於把一個整型變數的地址給前面的指標例如:#include

#include

int main()

11樓:程式新手

前面的 (int *)是強制轉換,後面的malloc(sizeof(int)); 是在記憶體中建立一個連續長度為sizeof(int)的區間之後再返回該區間的首地址給int * p

12樓:小飛花兒的憂傷

sizeof是個關鍵字,用來計算指定資料型別或指定變數的空間大小(以位元組為單位)

int a;

sizeof(a) = sizeof(int) = sizeof a;

malloc的引數是位元組長度

13樓:匿名使用者

malloc()函式的作用是分配製定位元組數的空間sizeof()為單目運算 求出對應型別所佔用的位元組數(型別名)為單目運算 為強制型別轉換

要注意的是 malloce函式申請得到的空間是無型別的空間 必須強制轉換成對應指標可以指向的空間的型別

這裡定義的是int *p 所以p指標只能指向int型空間sizeof(int) 求得int型別所佔的位元組數malloc(sizeof(int)) 申請一個跟int所佔的空間大小一樣的空間

(int*)malloc(sizeof(int)) 將申請得到的空間地址轉換成了int型別空間地址

最後就可以賦值給指向int型空間的p指標了

(int*)malloc(sizeof(int)*n)????不懂什麼意思,

14樓:倒黴熊

就是分配 n個int空間

平時我們使用陣列, int a[3];編譯器會自動為我們分配3個空間,

如果我們想自己分配空間,也就是動態分配時:

int *p=(int*)malloc(sizeof(int)*3);

也是分配三個空間。

15樓:魯飆營霞姝

是一樣的,第一個*是與int

合在一起,表示int

型的指標

第二個*是乘號,malloc的引數是要申請的記憶體的大小,sizeof(int)*n

或者n*sizeof(int)的意思都是一樣的,這句話的意思是,sizeof(int)=4,所以這句話的意思是申請一塊4*n位元組的記憶體空間,

這句話一般是用來申請動態int型陣列的

16樓:濤跋涉

sizeof(int)是求int型資料所佔記憶體大小(按4),具體和編譯器有關(多數是4位元組,如:vc++ 6.0,vs 2005等,在turbo c中是2位元組),sizeof(int)*n就是申請n個連續的int型別的記憶體,就是連續4*n個位元組的記憶體單元,返回值是這連續4*n個位元組的首地址~~~

c語言中(char *)malloc (sizeof (char));這行**是怎麼解釋的

17樓:匿名使用者

sizeof(char)計算char型別佔用的位元組數。sizeof(char)== 1

malloc申請動態記憶體

(char *)把指標強制轉換為char型別指標。

合起來就是動態申請一個char型別大小的記憶體。

malloc(size *sizeof(stackitem));什麼意思?請高手賜教

18樓:匿名使用者

malloc()動態分配函式,按引數位元組分配size * 分配size個元素

sizeof(stackitem) stackitem元素的位元組數合起來就是動態分配size個stackitem元素的動態陣列

19樓:藍騎士之阿強

malloc是在堆裡申請記憶體分配的函式,其引數是要申請分配記憶體的大小。

這句話得意思應該就是要分配size個sizeof(stackitem)大小的空間,stackitem是一個自定義的型別,sizeof(stackitem)是求其大小。

20樓:匿名使用者

在堆上分配空間,空間是 size個stackitem,返回指向這個空間首地址的指標。

如 sp=(stackitem *)malloc(size *sizeof(stackitem));可以用sp[0],...,sp[size-1]訪問這些stackitem型別的變數。

21樓:匿名使用者

首先搞清楚的是這句**中的結構組成

malloc 分配記憶體的函式

sizeof 計算記憶體大小的函式

stackitme 程式中宣告的結構體

size int 型資料

所以整個**的含義就是 分配size個stackitme大小的記憶體空間

p=(int*)malloc(sizeof(int)*(n+1))是什麼意思 20

22樓:匿名使用者

sizeof就是空間大小嘛,malloc就是分配空間的意思,int整形。你自己試著理解完了在軟體上嘗試,初學者這樣入門也挺不錯的。

23樓:

就是給p分配n+1個整數空間

相當於 p = new int(n+1);即p為n+1大小的整數陣列!

24樓:

就是p指向一個大小為(n+1)×int的空間

p指向第一個單元

C語言中,sizeof和strlen都是表示字串長度的嗎

sizeof 計算的是資料在記憶體中存放的長度,單位是 位元組 可以對任何資料型別做運算,而且它是一個運算子 和 類似 當對字串計算時,包含末尾的 0 當對字元陣列操作時,返回的是陣列的總的長度,也就是當把陣列作為引數傳遞給sizeof時是不會退化的。strlen 計算的是字串的長度,單位是 字元 ...

C語言一個關於sizeof和strlen的問題

2個意義不一樣的。strlen 是函式。引數為。chan 專門針對字串的。sizeof 是運算子,不是函式,可以這樣寫sizeofa,等等。strlen求字串的長度,不含字串結束標誌。因此strlen a sizeof求的是編譯器為陣列放分配的空間大小,一旦。chara 5 定義了,則就會分配5個位...

和蟈蟈有關的,和蟈蟈有關的資料

分佈於吉林 遼寧 內蒙古 寧夏 山西 甘肅 陝西 河北 河南 山東 江蘇和安徽。雄蟲體長35 4 毫米,雌體長40 50毫米。全身鮮綠或黃綠色。頭大 顏面近平直 觸角褐色,絲狀,長度超過身體 複眼橢圓形。前胸背板發達,蓋住中 後胸 呈盾形。前翅各脈褐色。雄蟲翅短,具發音器 雌蟲只具有翅芽,腹末有馬刀...