Cod*_*lus 3 c comparison struct pointers void-pointers
我有以下函数从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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
背后的含义是cur->data == data什么?
由于我的数据是generic(void*),这对于任何原始类型和任何结构类型意味着什么?
例如,考虑员工结构:
struct employee
{
char name[20];
float wageRate;
};
Run Code Online (Sandbox Code Playgroud)
cur->data == data如果数据属于类型,语句将如何工作struct employee*?由于数据是指向结构的第一个内存地址的指针,我只是比较指针地址?
cur->data == data
Run Code Online (Sandbox Code Playgroud)
将指针与指针cur->data进行比较data.你要比较他们的价值,而不是他们的地址.指针是一个像任何其他变量一样的变量.它有一个地址(即&some_ptr)和一个值(即它所指的东西的地址).
请注意,其他类型的比较(即< > >= <=)会导致未定义的行为,除非指针指向同一个数组的元素或者指向结尾的元素(除非您知道它们指向驻留的"对象",否则这样做是没有意义的无论如何,在同一块连续的记忆中,但仍然).