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 sv1
và sv2
?
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?
Bài liên quan
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.
vậy khi mình dùng
gets((*sv2).mssv);
hoặc dùng cách này:để 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
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
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 mà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.