Как вернуть адрес указателя для структурной переменной - PullRequest
1 голос
/ 01 августа 2020

Я работал со структурами данных, и пока я писал код, мне нужно было вернуть адрес указателя, который был определен в структуре. Итак, вот мой код, но когда я его компилирую и запускаю, он не работает и выдает сообщение об ошибке, поскольку «назначение делает указатель из целого числа без преобразования». Как его переписать?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Node{
    
    int x;
    struct Node *next;
    
};


void main(){
    int i;
    struct Node *head;
    head = (struct Node*) malloc(sizeof(struct Node));
    head->next=NULL;
    
    
    /*Ekle(5,head);
    Ekle(10,head);
    Ekle(15,head);
    printf("Enter the value of 'ara' element");
    scanf("%d",&i);
    Print(head);
    ArayaEkle(i,20,head);
    Print(head);*/
    
    head = siraliEkle(10,head);
    head = siraliEkle(5,head);
    Print(head);
    
}

void Print(struct Node *root){
    
    while(root->next!=NULL){
        root = root->next;
        printf("%d\n",root->x);
        
        
    }
}

struct Node *siraliEkle(int sayi, struct Node *root){
    
    if(root==NULL){
        root = (struct Node*) malloc(sizeof(struct Node));
        root->x = sayi;
        root->next = NULL;
        return root;
    }
    
    else if(root->next==NULL){
        if(root->x>sayi){
            struct Node *temp = (struct Node*) malloc(sizeof(struct Node));
            temp->x = sayi;
            temp->next = root;
            root = temp;
            return root;
        }
    }
    
    
}

Ответы [ 2 ]

3 голосов
/ 01 августа 2020

Вы должны объявить (или определить) функции перед их использованием.

Без объявления или определения типы аргументов функции принимаются равными int, и это вызовет проблемы, когда фактические типы не int.

struct Node{
    
    int x;
    struct Node *next;
    
};

/* add these declarations */
void Print(struct Node *root);
struct Node *siraliEkle(int sayi, struct Node *root);

int main(){ /* also return type should be standard int */

Также не забудьте вернуть что-то из siraliEkle, даже если root != NULL && (root->next != NULL || root->x <= sayi).

0 голосов
/ 01 августа 2020

Если вы хотите вернуть адрес для указателя структуры, используйте объявление

struct Node *siraliEkle(int sayi, struct Node *root);   

Как показано ниже, и верните:

return &root;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...