30/09/2018, 17:58

Thắc mắc về con trỏ trong struct

Em mới bắt đầu học C và bị kẹt ở phần struct, em lấy code từ tài liệu lập trình C trên này, nhưng khi chạy thì lại bị lỗi:

  #include<stdio.h>
  void taoToadodiem(int *diembatky);
  typedef struct Toadodiem
  {
        int x;
        int y;
  } Toadodiem;
int main()
{
      Toadodiem diembatky;
      taoToadodiem(&diembatky);
      printf("%d %d ", diembatky.x, diembatky.y);
      return 0;
}
void taoToadodiem(int *diembatky)
{
     (*diembatky).x = 0;
     (*diembatky).y = 0;
}

Chương trình báo lỗi:
: In function ‘main’:
warning: passing argument 1 of ‘taoToadodiem’ from incompatible pointer type [enabled by default]
note: expected ‘int *’ but argument is of type ‘struct Toadodiem *’
In function ‘taoToadodiem’:
error: request for member ‘x’ in something not a structure or union
error: request for member ‘y’ in something not a structure or union
Process terminated with status 1 (0 minute(s), 0 second(s))
2 error(s), 1 warning(s) (0 minute(s), 0 second(s))

Cho em hỏi tại sao lại có lỗi đó và chữa ntn ạ?

lâm phúc tài viết 20:11 ngày 30/09/2018

bạn ghi lộn rồi ^^
nếu bạn muốn truyền vào hàm 1 con trỏ kiểu struct thì con trỏ đó phải có kiểu struct luôn, sửa 2 chỗ
prototype

void taoToadodiem(Toadodiem *diembatky);

và tên hàm ở dưới lại là chạy dc
*sai nữa tính típ :3 *

vũ xuân quân viết 20:09 ngày 30/09/2018

void taoToadodiem(int *diembatky)
{
(*diembatky).x = 0;
(*diembatky).y = 0;
}

Toadodiem diembatky;

hàm taoToadodiem thi em truyền là con trỏ kiểu int.
trong khi đó em lại truyền struct Toadodiem vào hàm taoToadodiem

Mai Anh Dũng viết 20:08 ngày 30/09/2018

Nếu là code C thì phải có tag name struct đặt trước tên struct nữa nhé.

struct Toadodiem * diembatky
Huy viết 20:11 ngày 30/09/2018

Cảm ơn các anh đã chỉ, em chạy ct được rồi :D, mà con prototype; phải ghi dưới hàm struct ct mới cho phép

Bài liên quan
0