如何解决:从不兼容的指针类型初始化

萨斯

当我编译并运行程序时,它说:在函数'addToTheEnd'中:[警告]从不兼容的指针类型初始化//它指向此行-> knot_t * current = start;

如何解决?我是C的新手,所以我不知道应该更改什么。我试图理解它,但我不明白。我的目标是在运行该程序时从该程序中获取一些输出,但是什么也没有显示。

#include <stdio.h>
#include <stdlib.h>

typedef struct knot {
    int number;
    struct knot *next;
} knot_t;

int addToTheEnd(knot_t **start, int value) {
    knot_t *new_ = (knot_t *)malloc(sizeof(knot_t));
    if (new_ == NULL) {
        return 1;
    }
    new_ -> number = value;
    new_ -> next = NULL;
   
    if (start == NULL) {
        *start = new_;
    } else {
        knot_t *current = start;
        while (current -> next != NULL) {
            current = current -> next;
        }
        current -> next = new_;
    }
   
    return 0;
}

void printList(knot_t *start) {
    knot_t *current = start;
    while (current != NULL) {
        printf("%d ", current->number);
        current = current -> next;
    }
}

void clearList(knot_t *start) {
    knot_t *current = start;
    while (current != NULL) {
        knot_t* trenutni = current;
        current = current -> next;
        free(trenutni);
    }
}

int main() {
    knot_t *start = NULL;
    int i = 0;
    for (i = 0; i < 10; i++) {
        if(addToTheEnd(&start, i)) {
        printf("Fail\n");
return EXIT_FAILURE;
}
    }
   
    printList(start);
    clearList(start);
   
    return EXIT_SUCCESS;
}
来自莫斯科的弗拉德

函数具有start类型的参数knot_t **

int addToTheEnd(knot_t **start, int value) {

而局部变量current的类型为knot_t *

knot_t *current = start;

因此,由于没有从类型knot_t **到类型knot_t *隐式转换,因此编译器会发出错误。

看来你是说

knot_t *current = *start;

还有if语句的条件

 if (start == NULL) {
        *start = new_;

一定是

 if (*start == NULL) {
        *start = new_;

当函数在成功的情况下返回1而不是0时,逻辑上也将更加一致。

该功能可以通过以下方式定义

int addToTheEnd( knot_t **start, int value ) 
{
    knot_t *new_knot = malloc( sizeof( knot_t ) );
    int success = new_knot != NULL;

    if ( success )
    {
        new_knot -> number = value;
        new_knot -> next = NULL;
   
        while ( *start != NULL ) start = &( *start )->next;

        *start = new_knot;
    } 
   
    return success;
}

并且由于函数printList不会更改指向节点,因此至少应声明为

void printList( const knot_t *start) {
    const knot_t *current = start;
    while (current != NULL) {
        printf("%d ", current->number);
        current = current -> next;
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何解决不兼容类型错误?

如何初始化内联结构类型的指针成员?

非法的char初始化程序-如何解决?

分配给指针时从不兼容的指针类型警告进行初始化

如何解决Singleton EJB初始化失败的问题

如何解决错误:从不兼容的指针类型传递“ proc_create”的参数4

从不兼容的指针类型获取初始化的上下文

数组指针编译时间警告:警告:从不兼容的指针类型初始化

当函数将数组作为参数时,C“警告:从不兼容的指针类型初始化”

导入手电筒时如何解决“无法初始化TensorProto DataType类型”错误?

如何解决变量初始化C ++的警告

“从不兼容的指针类型初始化”警告。我不明白原因

如何初始化Map类型变量以解决NullPointerException错误?

C中的指针函数:来自不兼容指针类型的foo初始化

警告:从不兼容的指针类型初始化-如何初始化包含函数指针的结构体数组

NSComparator错误:不兼容的块指针类型初始化

初始化'Method *'C的不兼容指针类型

不兼容的指针类型使用'UITextField *'类型的表达式初始化'NSString *'

从不兼容的指针类型(指向函数的指针)进行初始化

如何解决不兼容的指针类型发送?

typedef函数指针->从不兼容的指针类型初始化

初始化指向结构的指针时类型不兼容

错误未解决的类型,如何初始化dbhelper?

C:不兼容的指针类型初始化

proc_dir_entry警告:从不兼容的指针类型初始化[默认启用]

指针数组中的警告“从不兼容的指针类型初始化”

警告:从不兼容的指针类型初始化 [-Wincompatible-pointer-types]

如何解决未初始化的常量搜索::错误

如何解决“LateInitializationError:字段‘userMap’尚未初始化。”