2012-01-29 74 views
0

你好,伙计们!动态创建C中的对象

我熟悉JavaScript和PHP,但对C来说是新的。我试图在C和Craete碰撞算法中使用图形。现在,我需要动态创建对象,就像更高级的语言一样。例如,我需要通过自己的函数创建一个多边形,并使其成为整个脚本可见的对象。我假设,将需要一个结构。

据我所知,函数中声明的所有内容都保留在函数中。我该如何动态声明全局结构?

回答

1

C是一种相当静态的语言。通过静态我的意思是,你可以在运行时创建内存,但是你需要指针来解决在编译时声明的内存。这就是说,如果您在运行时需要内存,并且不希望在编译期间声明内存,则需要使用malloc和free(当您完成内存时)。

要创建一个可以在运行时创建内存的全局结构,最少需要编译时指向结构的指针。如果你需要几个这样的结构,你可以创建几个结构的内存价值,但是如果没有这些结构的数组,那么遍历这些结构将是单调乏味的。在编译时您需要指向结构的指针数组。有一些方法可以使它更具动态性,但是十年左右我使用C和C++,我们从未遇到过其他方式,包括设备驱动程序。

当你说在C中创建对象时,除了通过函数调用库或从堆创建内存创建的对象之外,实际上没有任何对象可以创建,然后通过重叠结构或数组指针来解释该内存它。

如果通过引用(指向参数的指针)传递参数,函数可以改变参数,函数可以不返回任何数据或返回单个数据原子,char,integer,smallint或指针。

1

a。函数可以返回值。

b。你可以使用全局变量。

c(可能是最有用的)。动态分配内存(使用malloc等)并返回指针。 (并记住在使用后释放它)

+0

我想你真的是指“你**不会**使用全局变量” – CAFxX 2012-01-29 21:41:43

+0

:)但在正确的情况下,它们是有用的。 – asaelr 2012-01-29 21:42:57

+0

只有当你知道你在做什么。我想冒险猜测OP没有。 – CAFxX 2012-01-29 21:44:25

1

您需要有一个结构或更复杂的抽象数据类型(ADT)来容纳您的动态创建的变量。一旦你有了这个,你可以通过malloc()创建你想要的任何对象,并将其存储在那里。

正如我前面提到的那样,强烈建议查看ADT并学习如何使用它们。这将允许您创建任何复杂的数据结构,如队列或链接列表,以便更多地面向OOP。

1

声明与结构相同类型的全局指针(指针数组)。使用像malloc等函数来动态分配内存并将其分配给指针。