如何将内存分配给非指针的类型?
我在互联网上搜索过,然后我的教科书对此一无所知。
所有的例子都来自那些
char *test;
test = malloc (STRING_SIZE * sizeof (char));
哪种指针形式,但如果一个结构甚至不需要指针类型来执行该工作如下
struct _test_t {
char *name;
int flag; // <-- Here
};
或者这是不赞成的? 我能做的只是声明为指针
...
int *flag;
...
然后像往常一样分配?
struct _test_t *t;
t->flag = malloc (sizeof (int));
还是出路?
答案 0 :(得分:1)
你似乎对指针有些困惑,而且事情最终会在内存中出现。结构的字段是结构内存的一部分。在您的情况下,结构由char
指针和int
组成。一旦你拥有了struct的实例,你就不需要单独分配它们了,因为它们已经是struct的一部分。
struct _test_t *t = malloc(sizeof(struct _test_t));
t->flag = 123;
t->name = NULL;
请注意,name
并未指出任何有趣的内容。让我们改变一下:
t->name = malloc(100);
请注意指针 name
与其指向的内存之间的区别。只有指针本身才是结构的一部分。
也可以通过在堆栈上分配它来创建struct的实例而不使用malloc:
struct _test_t t;
t.flag = 123;
t.name = malloc(100);
t
现在已在堆栈上分配,并且当您离开声明它的范围时将自动再次释放。但是,name
仍然指向堆上的内存不获取结构,因此您不必再需要手动释放它。
编辑:您提到要将内存分配给非指针的内容。尽管如此,这对我来说并没有多大意义。 malloc
的功能是为您的使用保留一些内存,并将指针返回到该内存。它需要返回已分配的内存地址,否则你不会知道它在哪里。指针实际上只是一个地址值。
您可以使用int
为malloc
分配空间,但是您将获得指向int
的指针,您必须使用该指针来访问实际的int
:< / p>
int *i = malloc(sizeof(int));
*i = 123;
在C中,没有经过指针就没有办法直接引用那个int,这可能是你想要的。在C ++中,您可以使用引用直接引用int值:
int *i = (int*)malloc(sizeof(int));
*i = 123;
int &j = *i;
cout << j << endl;
这将打印&#34; 123&#34;,表明j
直接引用整数值。但是,C没有该功能,因此您将始终必须使用指针。
答案 1 :(得分:0)
malloc
用于为编译时大小未知的对象分配内存。这就是它返回指针的原因,因为它是地址的C表示(这里是堆上分配的内存区域)。
将malloc用于其他类型没有任何意义,因为它们的大小是已知的(除了模板,但它是C ++)。你的_test_t
结构(resp struct _test_t * t)被分配了。在声明堆栈或堆时,无需手动分配每个成员。