繁体   English   中英

有人能解释一下这个简单的 c 代码会做什么吗?

[英]Could someone explain what this simple c code would do?

typedef struct{
int x;
int y;
} Coordinate_T;

Coordinate_T *p;
p = (Coordinate_T *)malloc(sizeof(Coordinate_T));
    
p->x = 100;
p->y = 200;
    
free(p);
    
exit(0);

我试图掌握指针的窍门,但是当它们像这样使用时真的很混乱。 我从教科书中得到了这段代码,我应该找出这段代码有什么问题

哇,我已经很长时间没有处理 C 指针了,但让我看看是否可以提供帮助。

Coordinate_T *p;

声明一个指向 Coordinate_T 结构的指针。 我们还没有任何可用的内存,我们只有一个指向……什么都没有的指针。

p = (Coordinate_T *)malloc(sizeof(Coordinate_T))

实际上为我们分配了内存。 现在 p 指向一些有用的东西,我们可以在其中存储值。 “malloc”是“内存分配”的简写。 它需要一个大小——你需要多少内存? “sizeof(Coordinate_T)”是一种简单的表达方式,表示“我想要指向的这个结构的大小。最后,类型转换”(Coordinate_T *)“告诉编译器“把它当作一个 Coordinate_T 指针”。

p->x = 100;
p->y = 200;

将我们新分配的结构体的 x 值设置为 100,将 y 值设置为 200。箭头符号 (->) 表示“p 是一个指针;在它指向的内存中,设置...”

free(p)

释放刚刚用 malloc() 分配的内存。 这意味着我们已经完成了,操作系统可以将该内存用于其他用途。 如果在使用完内存后不释放内存,那就是“内存泄漏”——它仍然被标记为正在使用中,并且操作系统无法重用它。 在长时间运行的程序中,泄漏的内存会不断累积,最终当没有更多可用内存时,操作系统会终止正在运行的程序。

exit(0);

只是杀死程序,并返回值零,这是传统的值,意思是“一切都很好”。 如果程序返回任何其他值,则意味着发生了一些错误。

tl;dr :这个程序没有多大作用。 它设置了几个值,然后扔掉它使用的内存,然后退出。 包含一个 printf() 语句来将这些值回显给您会更有趣,但我将把它留给您。 ;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM