c - 为结构指针分配内存
问题描述
为什么声明结构指针的时候需要分配内存
struct A{
///
};
int main(void)
{
struct A *var=(struct A*)malloc(sizeof(struct A));
//
//
}
但是当我们声明一个结构变量时,我们不需要分配任何内存吗?
struct A var;
解决方案
对于任何指针都是如此,而不仅仅是指向结构的指针。原因是,当您声明一个变量(类型为 int、char 或某个 struct A 的类型)时,您告诉编译器创建一个新变量/实例。因此,编译器会自动为该变量分配内存。但是,当您声明指向某个 int 或某个 struct A 的指针时,您实际上是在告诉编译器您需要对某个变量的引用,而不是完全是该类型的新变量。为了说明这一点:
struct A{};
int a,b; // New variable a and b
struct A c,d; // New variables c,d of type struct A
// Now take a look at this:
int *px;
px = &a; // px referencing to a, no new int variable created;
px = &b; // px referencing to b, no new int variable created;
struct A* py;
py = &c; // py referencing to c, no new struct A variable created;
py = &d; // py referencing to d, no new struct A variable created;
现在,如果你只声明一个指针 A* p,这里 p 没有引用任何东西。因此,如果您希望 p 引用 struct A 的新实例,则必须显式编写:
c
p = (struct A*)malloc(sizeof(struct A));
推荐阅读
- angular - Ionic4 类型的角度总是加载主页
- python - matplotlib 使 webview 崩溃
- dask - 在 dask_jobqueue 中,如何在 job_script 中添加额外的行?
- python - 使用 pyad 更新姓氏
- elasticsearch - 如何添加和/或作为要查询的字符串的一部分?
- node.js - 当我运行 npm start 创建 React 应用程序时缺少脚本
- ios - iOS 自动续订订阅 - 警报确认回调
- javascript - 如何用逗号计算金额
- node.js - Npm 删除生产环境的测试文件夹
- ajax - 在 Drupal 中上传 JPG 时出现 AjaxError