Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在malloc中使用和不使用指针的区别_C - Fatal编程技术网

在malloc中使用和不使用指针的区别

在malloc中使用和不使用指针的区别,c,C,我只是想知道mallocsizeof*some_结构和mallocsizeofsome_结构之间的区别 我正在学习C语言,最近我遇到了一些问题。对于这个新手问题,我很抱歉,但我不知道如何在谷歌上搜索它。第一个是获取空间,空间的大小由一个变量表示,该变量由一个名为some_structure的指针指向,这是一个奇怪的指针命名 第二个是获取空间,它的大小由一个名为some_structure的变量表示,也就是一个包含类似整数的变量的奇怪命名 注意,其他人发现变量的命名非常奇怪,他们默默地认为你在问一

我只是想知道mallocsizeof*some_结构和mallocsizeofsome_结构之间的区别


我正在学习C语言,最近我遇到了一些问题。对于这个新手问题,我很抱歉,但我不知道如何在谷歌上搜索它。

第一个是获取空间,空间的大小由一个变量表示,该变量由一个名为some_structure的指针指向,这是一个奇怪的指针命名

第二个是获取空间,它的大小由一个名为some_structure的变量表示,也就是一个包含类似整数的变量的奇怪命名

注意,其他人发现变量的命名非常奇怪,他们默默地认为你在问一个完全不同的问题。这个答案可能有点固执地试图回答所问的问题。 请考虑清楚你的问题。如果似是而非的猜测是正确的,你会发现很多答案已经存在。
如果有人ping我并给我几个小时的时间,我会删除我的,因为我现在必须离开。

查看malloc的定义,您可以看到malloc函数需要一个size\u t size参数

因此,不同之处在于您请求分配的大小:指向某个结构的指针,或者结构本身的大小

请注意,为了正确传递请求的大小,必须使用sizeof: mallocsizeof*some_结构或mallocsizeof some_结构

typedef struct some_structure {
    int a;
    int b;
    int c;
} some_structure;

int main(void)
{
    some_structure *hello = NULL;
}
然后,hello是某种_结构的类型*:这是结构的指针。 hello是某种结构的类型:这是某种结构。 每一级指针都会出现相同的情况:

int main(void)
{
    some_structure **hello = NULL;
}
然后,hello是某种_结构的类型**:这是结构指针的指针。 hello是某种_结构的类型:,这是某种_结构的指针。 最后,**hello是某种类型的_结构:这是某种_结构。 当您malloc某些内容时,您希望为结构本身分配内存。然后,您需要malloc某些_结构本身的类型

这就是为什么你通常使用一些结构

为什么不直接使用sizeofsome_结构? 因为如果变量类型发生变化


对于某些结构*hello=mallocsizeof*hello,即使更改hello的类型,malloc仍然有效。

请参阅以下代码以了解区别:

struct abc
{
    int a, b, c;
    char d, e, f;
};

int main(){
    abc a;
    abc *b;
    printf("%zu %zu",sizeof(a), sizeof(b));
}
输出为:

16 8
指针的类型为长无符号整数,这就是大小为8的原因

对于结构abc,为填充添加了size=4*3+1*3=15 1


在执行某些结构时,您分配的是该结构的全部内存,而在第二种情况下,*某些结构只分配指针的内存。

您的问题并不十分清楚,因为它缺少真正的代码,甚至没有真正的定义您真正谈论的内容。但我希望这能对这个话题有所启发

#include <stdio.h>  
#include <stdlib.h> 

struct a{
    int b;
    long long int c;
};

int main()
{
    struct a *foo; //this is just a pointer to not allocated memory
    foo = malloc(sizeof (*foo)); //allocation of the struct for the pointer

    foo->b = 2;
    foo->c = 3;

    struct a **bar; // pointer to the pointer of struct;
    bar = malloc(sizeof (foo)); //size of a pointer
    *bar = foo;

    printf("%d\n",(*bar)->b); //bar is a pointer to foo that points to your memory for the struct  
    printf("size of pointer %d\n",sizeof foo);
    printf("size of struct %d\n",sizeof *foo);
}

这几乎不取决于某个结构是如何定义的。某个_结构的类型是什么,是否缺少一个sizeof?请为Context显示更多代码这两个示例都不好。PS将代码放在问题主体中。这不是FB,这里有自己的规则第一个版本永远不会工作。结构不是指针,不能取消引用。你可能是指mallocsizeof*指向某个结构的指针与mallocsizeofsome结构。下面的答案中有很多猜测。我的问题是试图回答你问的问题,这可能也没有帮助。我没有注意到它有多不清楚,只是发现变量的命名很奇怪。。。为了清楚起见,请尝试重新表述您的问题。抱歉,我们将对其进行编辑。但是它不会有什么不同那么它将是对关于mallocsizeof某物而不是MallocSomeThing的稍微不同的问题的答案。是的,编辑它,谢谢:更正它,谢谢你的建议这似乎是对mallocsizeof某物而不是MallocSomeThing的一个稍微不同的问题的答案。我要补充一个事实,即他缺少一个sizeof,但除此之外,这个回答问题的人仍然猜测OP的意思不同于书面形式。虽然猜得很好…@alk我仍然编辑以避免误解。谢谢你的意见,谢谢!这正是我想要的答案!。我为这些糟糕的例子感到抱歉,我在凌晨4点就遇到了这个问题,当时心情不好,哈哈。