sizeof與malloc的問題

2025-01-25 14:45:08 字數 2707 閱讀 2424

1樓:

sizeof(keypoint)計算顯示是32 是因為結構裡的元素要對齊。

1個 double 為 8,2個 double 為 16, 2個int 為 8, 多餘的 int 與 8 對齊,共 32。

pt = keypoint*)malloc(sizeof(keypoint));分配1個看不清楚。

給你分配3 個:

#include

typedef struct tagkeypoint

int x;

int y;

int index;

double mag;

double ori;

keypoint;

void main()

keypoint *pt;

int a;

a = sizeof(keypoint);

printf("%d",a);

pt = keypoint*)malloc(sizeof(keypoint) *3);

printf("%u %u %u",pt,pt+1,pt+2);

我這裡vc++編譯器輸出:

一樣是 32

2樓:網友

你的系統是不是64位的?

sizeof算出來的值應該是28,但是輸出的是32。你可以試一下,將其二個int改為double,輸出的是40,將第三個改為double,輸出的是32。可能原因是64位系統上資料按8個位元組對齊的。

至於malloc分配空間,malloc從堆中分配空間,其中不僅包括資料,還包括乙個描述部分,這就是為什麼delete時只用傳遞乙個指標,而不用傳遞長度的原因。

3樓:網友

因為系統分配的記憶體空間不一定是連續的,它中間有一定的空間是不定的,所以你不能用pt = keypoint*)malloc(32));來代替的。

malloc(sizeof)是什麼意思?

4樓:帳號已登出

malloc(sizeof)是c語言,是向系統申請記憶體空間的函式。

sizeof一般用於獲取字串。

的長度,是處理攔虛字串的重要工具。

同時,sizeof在資料結構。

這門課中是建立結點必要的命令。

例:*head=(node*)malloc(sizeof(node));注]node為結構體。

sizeof(node)表示獲取node型別的長度,malloc(sizeof(node))表示在記憶體中申請乙個node長度的空間。

關於c語言:

c語言是一門程序導向的、抽象化的通用程式設計語言,廣泛應用於底層開發。c語言能以肆仔簡易的方式簡雹燃編譯、處理低階儲存器。

c語言是僅產生少量的機器語言。

以及不需要任何執行環境支援便能執行的高效率程式設計語言。儘管c語言提供了許多低階處理的功能,但仍然保持著跨平臺的特性,以乙個標準規格寫出的c語言程式可在包括類似嵌入式處理器以及超級計算機。

等作業平臺的許多計算機平臺上進行編譯。

為什麼不是malloc(sizeof(int*)i);?

5樓:網友

要理解兩個 * 是不一樣的。

第乙個:sizeof(int) 就是int佔的位元組數,也就是4,後面的 * 是乘號,也就是4*5=20

這句話的意思是動態分配 i 個,也就是5個 int 型別大小的空間給a,相當於int a[5] ,當然兩者不能等價。

第二個:sizeof(int*) 就是int*的位元組數,指標型別的大小是4,其中 * 表示指標型別。

跟後面根本不能結合,4i 是什麼呢?沒這樣的寫法,因此是錯的。

如果想定義動態分配 i 個,也就是5個 int* 型別大小的空間給a,相當於int* a[5],那麼就改寫成a = (int*)malloc(sizeof(int*)*i);

6樓:網友

sizeof(指標),給出的int型變數的指標本身儲存空間的大小,而前者是int型變數的儲存空間的大小,不一樣的。

7樓:孤松獨海

sizeof(int) 是求出1 個int型別變數 所佔位元組 * i 是i個int型別變數所佔總位元組記憶體。

8樓:網友

sizeof(int*)i你認為是什麼意思???

為什麼不是malloc(sizeof(int*)i);?

9樓:剛穹板泰初

要理解兩個。

是不一樣的。

第乙個:sizeof(int)

就是int佔的位元組數,也就是4,後面的。

是乘號,也就是4*5=20

這句話的意思是動態分配。

i個,也就是5個。

int型別大小的空間給a,相當於int

a[5]當然兩者不能等價。

第二個:sizeof(int*)

就是int*的位元組數,指標型別的大小是4,其中。

表示指標型別。

跟後面根本不能結合,4i

是什麼呢?沒這樣的寫法,因此是錯的。

如果想定義動態分配。

i個,也就是5個。

int*型別大小的空間給a,相當於int*a[5],那麼就改寫成a

int*)malloc(sizeof(int*)*i);

c語言有關sizeof的問題,c語言關於sizeof的問題

a 和 0 都是字元型,一個字元型一個位元組,sizeof是算佔多少記憶體,a 0 是轉化為int進行處理的,計算後是一個int型。int是整形,有的編譯器佔2個位元組,有的佔4個。所以是2,1 因為 a 和 0 都表示的是字元,而字元型常量佔據的記憶體空間為1位元組,即sizeof a 1,siz...

課文學與問,《學與問》課文中的問題

學與問 是一篇說明事理的文章。課文圍繞 勤學好問 這一中心論點,通過中外兩個具體的事例,告訴我們 問 的重要性,教育學生要從小養成勤學好問的好習慣。教學此課時,我從談話匯入。板書 學 問 人們常把有知識的人說成 有學問 知識是學來的,也是問來的。今天我們來學習 學與問 告訴學生這是一篇說明事理的課文...

ASP ACCESS與ASP MSSQL的問題

空間是否支援access或者mssql與你安裝什麼系統沒關係,access或者mssql都是安裝在空間的伺服器上。如果你需要開發asp mssql 要建立開發環境的話,當然要在自己的電腦或者網路上安裝mssql。至於安裝哪個版本,需要根據你的需求來定,例如 資料庫大小 併發數量 cpu數量 等等 如...