加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C void指针和指针比较

发布时间:2020-12-16 10:22:26 所属栏目:百科 来源:网络整理
导读:我有以下函数从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
我有以下函数从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->数据与指针数据进行比较.你要比较他们的价值,而不是他们的地址.指针是一个像任何其他变量一样的变量.它有一个地址(即& some_ptr)和一个值(即它所指的东西的地址).

请注意,其他类型的比较(即<>> =< =)会导致未定义的行为,除非指针指向同一个数组的元素或一个超过结尾的元素(不是这样做有意义除非你知道他们指的是“对象”,无论如何都存在于同一块连续的记忆中,但仍然存在.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读