谁能给我一个很好的C结构教程?
我已经进行了谷歌搜索,但我找到了正常的信息。我正在寻找详细的结构。请告诉我。
您可以随时阅读Brian W. Kernighan 的教程,非常好。至于“细节”究竟是什么意思?毕竟,结构相当简单。上面的链接涵盖了常见的问题、类型定义、结构指针等。如果您仍然不清楚结构,也许您应该尝试发布一些更具体的问题。
使用 C(不是 C++)中的结构要记住的一件事是,在声明它们时必须使用 struct 一词:
struct Point location;
正因为如此,你会经常看到它们用如下的 typedef 声明:
typedef struct tagPoint {
int x;
int y;
} Point;
然后你可以像其他类型一样声明一个点:
Point location;
当你第一次看到这个符号时,它可能会令人困惑。
我通常建议(并且总是被建议)使用官方指南。对于 ANSI C,您无法获得比K&R2更详细和官方的信息。
正如其他人已经说过的,结构只是一组变量。根据您的目标,如果您想通过低级函数(使用指针算法的 fe)访问元素,您可能需要考虑填充或打包:结构元素通常在 4 字节边界处对齐(在 32 位上)。因此,包含不同大小元素的结构可能需要填充
struct foo {
int a;
char b;
int c;
char d;
}
在此示例中(假设 int 为 4 字节,char 为 1 字节并且 CPU 在 32 位边界对齐)您需要 3 个填充字节之后b
才能使结构对齐。在这种情况下,对结构进行不同的排序会更有效。请注意,这不会更改其用法,因为这不会更改成员名称。并非所有处理器都需要对齐结构成员,但使用压缩结构成员会节省一些空间,但会导致速度下降。在大多数情况下,您不必担心这一点。
至于 struct 周围的 typedef,您甚至可以为 typedef 和 struct 使用相同的名称,即:
typedef struct foo {
int a;
int b;
} foo;
这使得可以使用
struct foo variable;
或者
foo variable;
用于声明类型的变量struct foo
。
从我的角度来看,键入结构是一个坏主意,因为它隐藏了 typedef(如foo
)是结构的信息,并且编写关键字struct
并不是真正的额外工作(特别是如果那些 typedef 添加了后缀来指示它们是一种结构——我经常看到这种情况)。
编辑typedef
:在第二个示例中添加了缺失。
结构基本上是一个或多个变量的集合,可能是不同类型的。
插图:
struct foo {
int a;
int b;
};
结构的成员被称为:
structure_variable.member
structure_pointer->member
(*structure_pointer).member // Fiddly; use -> instead
例如:
struct foo test;
struct foo *ptr = &test;
test.a = 1;
ptr->b = 2;
您可以做其他事情,例如:
笔记:
好书:C 编程语言,第 2 版(Prentice Hall 软件)
查看 Sedgewick 的《C 语言算法》一书。在那里你会看到很多不同的数据结构在工作。另一个有趣的读物是来自 gtk+ 的 Gobject 模型。因为他们在那里为 C 中的面向对象编程构建了一个基础设施,所以数据结构处理非常多。值得一看的另一件事是 COM 模型,您可以将其转换为具有特定布局的 C 结构。glib 包含大量有用的数据结构,例如 libapr 或 libnspr。
您几乎可以检查任何“脚本”语言,并会看到“工作中的数据结构”;-)
问候弗里德里希
很难反驳 Nick Parlante 的链表存储库的厉害之处:
http://cslibrary.stanford.edu/
对于链表中使用的结构,上面的链接是无与伦比的。
您不会涉及的是在结构中使用函数的方面,但是如果您能理解上述内容,那么其他任何事情都会变得轻而易举。