如何为非指针类型分配内存?
我在 Internet 上搜索过,但我的教科书对此一无所知。
所有的例子都来自这样的人
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));
或任何出路?
最佳答案
您似乎对指针以及事物在内存中的最终位置有些困惑。结构的字段是结构内存的一部分。在您的例子中,该结构由一个 char
指针和一个 int
组成。一旦拥有结构的实例,就不需要单独分配它们,因为它们已经是结构的一部分。
struct _test_t *t = malloc(sizeof(struct _test_t));
t->flag = 123;
t->name = NULL;
注意 name
还没有指向任何有趣的东西。让我们改变一下:
t->name = malloc(100);
注意指针 name
和它指向的内存之间的区别。只有指针本身是结构的一部分。
也可以在不使用 malloc 的情况下创建结构的实例,方法是在堆栈上分配它:
struct _test_t t;
t.flag = 123;
t.name = malloc(100);
t
现在分配在堆栈上,当您离开声明它的范围时将自动再次释放。但是,name
仍然指向内存不会随结构一起释放的堆,因此您必须在不再需要它时手动释放它。
编辑:你提到你想将内存分配给不是指针的东西。但这对我来说真的没有意义。 malloc
的功能是保留一些内存供您使用,并返回一个指向该内存的指针。它需要返回它分配的内存地址,否则你不知道它在哪里。指针实际上只是一个地址值。
您可以使用malloc
为int
分配空间,但是您将获得一个指向您必须用来访问的int
的指针实际的 int
:
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;
这将打印“123”,表明 j
直接引用整数值。但是,C 没有该功能,因此您将始终必须使用指针。
关于c - malloc 将内存分配给非指针类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23908041/