【发布时间】:2019-02-07 05:53:04
【问题描述】:
我在 C 中有一个链表如下:
typedef struct intSet *link;
typedef struct intSet {
int num;
link next;
} intSet;
当我打印结构的各个成员的大小时,我得到了以下信息:
sizeof(List) = 8 bytes //List is a newly created list
sizeof(curr->num) = 4 bytes // curr is just a node within the list
sizeof(curr->next) = 8 bytes
我的问题是:无论列表中有多少元素,结构本身是否总是具有 8 个字节的大小,或者这 8 个字节仅与第一个节点有关,而列表中的下一个节点不同相同结构的实例?
我问的原因是因为我打算在 PostgreSQL 中将其实现为用户定义的数据类型,因此它需要我声明数据类型的长度是常量还是变量:
CREATE TYPE list (
internallength = 8? or internallength = variable
input = ..., output = ... );
如果它是变量,我必须将我的结构表示更改为:
typedef struct intSet {
int size;
int num;
link next;
} intSet;
我怀疑如果节点是分开的并且不是同一结构的不同部分,我可能必须不断更新大小,因为下一个节点的大小可能比最后一个节点大 4 个字节。 任何提示或指示将不胜感激。
【问题讨论】:
-
does the struct itself always have a size of 8 bytes regardless of how many elements we have in the list结构的大小在运行时不会改变,但我怀疑它的 8 个字节,它应该是 16 个字节。我假设List是一个指针,所以你得到的是指针的大小,而不是结构的大小。 -
永远不要
typedef(数据)指针。哦,你应该阅读你喜欢的 C 教科书中的指针。
标签: c struct linked-list sizeof singly-linked-list