C:分配一个指针

时间:2016-02-17 18:16:48

标签: c pointers malloc

所以我们有一个实际上代表链表节点的结构。也是指向节点的指针。

typedef struct node{
    int value;
    struct node *next;
}node;

node* head=NULL;

如果我要使用malloc动态分配指针,

head=malloc(sizeof(node));

这意味着我正在创建一些内存空间,节点大小,并且head指向它。

我想知道这个head=malloc(sizeof(node*));之间的区别,正如你在sizeof中看到它有节点*而不是节点。现在我真的觉得我一直都不知道malloc到底做了什么!

3 个答案:

答案 0 :(得分:2)

\d{5}是整个结构的大小(以字节为单位),可以是任意大的。 sizeof(node)是指针变量的大小,无论结构有多大,它都是固定的(在大多数系统中它都非常小)。

答案 1 :(得分:2)

head=malloc(sizeof(node*));

将在内存中分配一个空格,以便将POINTER保存到node类型的对象。

head=malloc(sizeof(node));

将为结构本身分配空间,并返回该内存空间的地址,您将在head变量

中保留该空间

有关详细信息,请查看有关Malloc的其他问题。 How do free and malloc work in C?

答案 2 :(得分:1)

<html manifest="" lang="en-US">
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta charset="UTF-8">
    <title>My Application</title>
    <!-- The line below must be kept intact for Sencha Command to build your application -->
    <script id="microloader" type="text/javascript" src="bootstrap.js"></script>
    <style>
        .spinner_container{
            padding: 8px;
            background-color:#e5e5e5;
            border-radius: 3px;
            width: 250px;
            height: 100px;
            position: absolute;
            z-index: 15;
            top: 50%;
            left: 50%;
            margin: -100px 0 0 -50px;
        }
        .spinner_my_app{
            padding: 83px 0px 21px 17px;
            background-image: url('image_url');
            background-repeat:no-repeat;
            background-position: center 0;
            color: #666666;
            font: normal 13px helvetica, arial, verdana, sans-serif;
        }
    </style>
</head>
<body>

    <div class="spinner_container" id="page-loader">  
        <div class="spinner_my_app" id="spinner_text"></div>
    </div>

    <script>
        function getSearchParameters() {
            //Get window parameters from query string and transform into an object
            return {lang: "en"};
        }

        var params = getSearchParameters();

        if(params["lang"]){
            if(params["lang"].indexOf('fr') > -1){
                document.getElementById("spinner_text").innerHTML += "Loading My Application(French Translation)...";
            }else{
                document.getElementById("spinner_text").innerHTML += "Loading My Application®...";
            }
        }else{
            document.getElementById("spinner_text").innerHTML += "Loading My Application®...";
        }
     </script>

</body>
</html>

不正确。对head=malloc(sizeof(node*)); 的调用会分配足够的内存来仅保留mallocnode*必须指向node*对象。这意味着您需要分配足够的内存来保存node对象,而不是node