我有以下函数从 C 语言的链表中删除通用数据:
void removeData(void *data, struct accList *theList)
{
struct accListNode* cur = theList->head;
struct accListNode* prev = NULL;
for(; cur != NULL; prev = cur, cur = cur->next)
{
if(cur->data == data)
{
if(cur == theList->head)
{
theList->head = cur->next;
}
if(cur == theList->tail)
{
theList->tail = prev;
}
if(prev != NULL)
{
prev->next = cur->next;
}
free(cur);
return;
}
}
}
cur->data == data
背后的含义是什么?
由于我的数据是通用的 (void*
),这对任何基本类型和任何结构类型意味着什么?
例如,考虑员工结构:
struct employee
{
char name[20];
float wageRate;
};
如果数据是 struct employee*
类型,语句 cur->data == data
将如何工作?
由于数据是指向结构的第一个内存地址的指针,我只是比较指针地址吗?
最佳答案
cur->data == data
比较指针cur->data
指向指针 data
.您是在比较它们的值,而不是它们的地址。指针和其他变量一样是一个变量。它有一个地址(即 &some_ptr
)和一个值(即它所指事物的地址)。
请注意,其他类型的比较(即 <
>
>=
<=
)会导致未定义的行为,除非指针指向同一数组的元素或指向末尾的元素(不是它会使这样做是有意义的,除非你知道它们指向无论如何都驻留在同一 block 连续内存中的“对象”,但仍然如此)。
关于C void指针和指针比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11269594/