簡體   English   中英

從malloc強制轉換返回什么?

[英]What does a cast from malloc return?

我試圖了解名稱p的最后一行返回的內容。

#include <stdio.h>
#include <stdlib.h>
int main(){
    int a;
    int* p;
    p = (int*)malloc(sizeof(int));
}

Q1
假設malloc(sizeof(int))返回&name (名稱可以是x或y或w),將行解釋為p=(int*)(memoryAddress to begining of block size)是否安全?

Q2
有人可以重寫它以使其更清楚嗎? 也許在p =之前添加一行。我是C ++的初學者。

這是指向我如何理解所有內容的圖像的鏈接……僅供參考。
圖片

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

該行僅分配4字節的內存(實際大小取決於編譯器),然后返回第一個字節的地址。 該第一個字節地址分配給p。

malloc的返回類型是通用的(void *)。 因此,我們需要將其強制轉換為int *才能將其用作整數。 說“將它用作整數”,意味着連續4個字節的內存將用作一個數據。

因此,如果將數據放入該變量中,如下所示:

*p=1234

從存儲在p中的存儲位置開始,它將使用所有32位存儲器。

關於安全性,請閱讀評論。

我想我已經知道了。

Malloc剛分配了sizeof(type)的內存,然后它僅返回一個(void ),並且在c ++中,不能為int * p分配一個void *,因為c ++嚴格要求“隱式轉換”。

所以答案

Q1答案
假設錯誤,malloc(sizeof(int))返回為sizeof(...)分配的字節數的第一個字節的void *類型

Q2答案
這可以重寫為

#include <stdio.h>
#include <stdlib.h>
int main(){
int* p;
p = new int;
}


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM