这是一个相当基础的问题,我对在C语言中传递内存有些不确定。
如果我有以下代码:
CGPoint* tileForCoordinates (CGPoint position, short width, short height)
{
CGPoint *tileCoordinate = (CGPoint*)malloc(sizeof(CGPoint));
tileCoordinate->xTile = (position.xPosition / width);
tileCoordinate->yTile = (position.yPosition / height);
return tileCoordinate;
}
如果我想在另一个源文件或其他地方调用它,我需要在上面声明一个指针并返回它吗?如果是这样,在我从另一个类中调用它时,该怎么做?
CGPoint *currentTilePosition = tileForCoordinates(curPosition, 50, 50);
malloc返回的指针需要被释放吗?有什么注意事项? :)
malloc
的返回值进行强制类型转换。但是有些人(比如我自己)认为这是一个坏习惯,因为这会引起很多争议和问题。 - Chris Lutzmalloc
函数返回一个void *
指针,可以隐式转换为任何其他指针类型。因此,CGPoint *x = malloc(sizeof(CGPoint));
就足够了。事实上,我建议使用CGPoint *x = malloc(sizeof *x);
。如果x
的类型发生变化,第一行代码需要修改两次,如果忘记了,可能会为对象分配过少的空间。在第二行中,当你改变x
的类型时,sizeof
会自动调整。 - Chris Lutz