我要删除第一个节点并返回已删除节点的值。但是我得到了这个警告:
warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
example=(**example).next;
因此,我的代码无法正常工作。谁能帮我解决这个问题?谢谢。
struct myStruct {
int data;
struct myStruct next;
}
int deleteNode(struct myStruct **example) {
struct myStruct *temporary;
if (temporary == NULL) {
emptyNode(temporary); // this function only returns NULL
}
temporary = *example;
example = (**example).next;
free(temporary);
return (**example).data;
}
答案 0 :(得分:1)
此结构声明至少包含两个错字。
cache:
key: $CI_PROJECT_PATH_SLUG
untracked: true
paths:
- project/node_modules/
policy: pull
第一个是在大括号后面没有分号。第二个是下一个数据成员必须具有指针类型。
看来你的意思
struct myStruct
{
int data;
struct myStruct next;
}
关于错误消息,然后在此作业中
struct myStruct
{
int data;
struct myStruct *next;
};
左侧操作数的类型为example=(**example).next;
,而右侧操作数的类型为struct myStruct **
,并且这些指针类型不兼容。因此,编译器会发出错误消息。
尽管如此,该功能在任何情况下都是无效的,因为您使用的是未初始化的变量,例如
struct myStruct *
该函数的接口是错误的,因为不清楚在调用空列表时该函数返回什么。
可以通过以下方式声明和定义函数。
struct myStruct *temporary;
if(temporary==NULL)
//...
它可以被调用,如下图所示
int deleteNode( struct myStruct **example, int *data )
{
int success = *example != NULL;
if ( success )
{
struct myStruct *temporary = *example;
*example = ( *example )->next;
*data = temporary->data;
free( temporary );
}
return success;
}