C 中的不可变结构值

immutable structure values in C

假设我们有这样的结构:

typedef struct Node{
    int data;
    struct Node *next;
    struct Node *prev;
}node;

typedef struct {
    node *front;
    node *rear;
}deque;

因为它是一个双向链表,我想设置 deque->front->next = NULLdeque->rear->prev = NULL 并且我不希望这些值被改变,无论其他函数做什么。这样的事情在 C 中可能吗?那会怎样? 谢谢。

在 C 中是不可能的。如果 variable/field 不是常量,它可以被赋值任何东西。

可以在 C++ 中通过定义 'deque link' class 并重载其赋值函数来实现。像这样:

class DequeLink {
    public:
        DequeLink& operator = (const DequeLink &dl) { /* check value and assign */ }
        DequeLink& operator = (void *p) { /* need this override to accept NULL as arg */ }

    private:
        DequeLink *m_pActualLink;
};

typedef struct {
    int data;
    DequeLink next;
    DequeLink prev;
} Node;