30/09/2018, 18:20

Thắc mắc về Con trỏ trong C

chào các anh chị
em có đoạn code về link list như sau ạ :

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

//1. khai bao cau truc du lieu danh sach lien ket don so nguyen
struct Node
    {
    int data ;
    struct Node *pnext;
    };
typedef struct Node NODE;

struct list
    {
    NODE *phead;
    NODE *ptail;
    };
typedef struct list LIST;

// 2. khoi tao danh sach lien ket

void init(LIST &l)
    {
    l.phead =l.ptail=NULL;
    }
//3 tao node trong danh sach

NODE* getnode(int x)
    {
    NODE *p;
    p=(NODE *)malloc(sizeof(NODE));
    if(p==NULL)
        {
        return NULL;
        }
    p->data =x;
    p->pnext=NULL;
    return p;
    }

    //4 them node
    void themdau(LIST &l,NODE *p)
    {
    if(l.phead==NULL) // danh sach rong
    {
    l.phead=l.ptail=p;
    }
    else
    {
    p->pnext = l.phead;
    l.phead=p;
    }
    }
    void themcuoi (LIST &l,NODE *p)
    {
     if(l.phead==NULL) // danh sach rong
    {
    l.phead=l.ptail=p;
    }
    else
    {
    l.ptail->pnext=p;
    l.ptail=p;
    }
    }

    //5.nhap du lieu
    void input(LIST &l)
    {
    int n,x,i;
    printf("ban muon nhap bao nhieu node : ");
    scanf("%d",&n);
    init(l);//khoi tao danh sach
    for(i=1;i<=n;i++)
    {
    printf("
 nhap data : ");
    scanf("%d",&x);

    NODE *p=getnode(x);
    themcuoi(l,p);
    }
    void in(LIST l)
    {
    for(NODE *p=l.phead;p!=NULL;p=p->pnext)
    {
    printf("%d	",p->data);
    }
    }
    }
int main()
    {

    printf("Hello world!
");
LIST l;
input(l);
in(l);
    return 1;
    }

đoạn code này chạy ngon trong C++
nhưng em gặp vấn đề khi dùng trong ngôn ngữ C , cụ thể là :

// 2. khoi tao danh sach lien ket

void init(LIST &l)
    {
    l.phead =l.ptail=NULL;
    }

cách truyền tham trị này trong C không được phép- và nó chạy ra lỗi ngay
em đã thử cách như

void init(LIST **l)
    {
    *l.phead =*l.ptail=NULL;
    }

nhưng nó vẫn lỗi ???
Em rất mong được các đàn anh chỉ bảo thêm ạ
em cảm ơn

Ezio viết 20:37 ngày 30/09/2018

Mình nghĩ là do trong hàm main bạn khai báo LIST l, thì đâu phải là kiểu con trỏ, nên tham số truyền vào của hàm khác kiểu dữ liệu của hàm nên không khớp.
P/s: thật ra mình toàn code C trên nên C++ nên không rành lắm

Huỳnh Đức viết 20:30 ngày 30/09/2018

bạn sửa để code mình chạy đc ko ?
vật vã cả chiều giờ :\

Interns viết 20:26 ngày 30/09/2018

trong C không có truyền tham chiếu bạn ơi. Để chạy được thì bạn đổi lưu file từ file.c sang file.cpp

Huỳnh Đức viết 20:24 ngày 30/09/2018

thì mình bảo là nó chạy ngon trên c++.
mình muốn sửa để nó chạy trên c kia mà @@

Bài liên quan
0