30/09/2018, 19:02

gán giá trị cho biến con trỏ kiểu cấu trúc

Hôm qua có đi thi và gặp câu này

typedef struct tagSV{
      char MSSV[8];
      char Ten[30];
      float DTB;
}SV;

SV sv1, *sv2;

Hỏi: trình bày và giải thích việc gán giá trị cho mã sinh viên của sv1sv2?
Trả lời:
TH1: gets(sv1.MSSV); sv1 là biến cấu trúc kiểu SV để truy xuất đến thành phần bên trong thì dùng toán tử . và ta dùng hàm gets(char *); để nhập dữ liệu
TH2: sv2 là biến con trỏ cấu trúc kiểu SV sẽ chứa địa chỉ của 1 biến SV khác, vì vậy ta không thể nhập dữ liệu được vì nó chưa trỏ vào vùng nhớ nào cả.

Mình giải thích vậy đúng chưa mọi người?

Gió viết 21:10 ngày 30/09/2018

Vì biến con trỏ sinh ra đã có giá trị nào đó, không phải là không trỏ tới mà là trỏ tới địa chỉ không xác định.

Interns viết 21:16 ngày 30/09/2018

vậy khi mình dùng gets((*sv2).mssv); hoặc dùng cách này:

while(((*sv2).mssv[i++] = getchar())!='\n');
    (*sv2).mssv[--i] = '\0';

để nhập thành phần MSSV của sv2 thì khi nhập xong nó báo has stopped working @Gio có biết tại sao không và làm thế nào để nhập MSSV được?

Theo mình nghĩ nếu sv2 đang trỏ tới vùng nhớ không xác định thì compiler phải báo lỗi không cho nhập MSSV luôn chứ nhưng nó lại cho mình nhập luôn và báo lỗi has stopped working

Gió viết 21:04 ngày 30/09/2018

Còn tuỳ th nữa: nếu sv2==NULL thì nó has stop là đúng, th khác thì nó vẫn có thể nhập được

Interns viết 21:07 ngày 30/09/2018

bạn test thử mình test thấy ở máy của mình sv2 trỏ tới địa chỉ 0x8 mà nó vẫn báo lỗi has stopped working

*grab popcorn* viết 21:12 ngày 30/09/2018

Từ địa chỉ 1->cỡ vài triệu là window (HDH nói chung) nó chiếm nó xài rồi nên dù trỏ tới đó cũng ko xài đc.

Bài liên quan
0