Xem đoạn code sau:typedef struct ST{ int d1,d2,d3;};ST v= {5, 6, 7};ST* p=&v; p.d1++;Giá trị của biến v là:
Đáp án đúng: D
Đoạn code này có lỗi cú pháp. Trong C, khi bạn có một con trỏ đến một struct, bạn cần sử dụng toán tử ->
để truy cập các thành viên của struct thông qua con trỏ, hoặc sử dụng (*p).d1++
. Biểu thức p.d1++
sẽ gây ra lỗi biên dịch vì p
là một con trỏ, không phải một struct trực tiếp. Do đó, đoạn code sẽ không biên dịch được.
Câu hỏi liên quan
Đoạn chương trình C được cung cấp có một số điểm cần lưu ý:
clrscr()
: Hàm này thường được sử dụng trong môi trường Turbo C++ để xóa màn hình. Tuy nhiên, nó không phải là một phần của thư viện chuẩn C/C++. Để sử dụng, cần include thư việnconio.h
. Nếu không có thư viện này hoặc tương đương, trình biên dịch có thể báo lỗi hoặc cảnh báo, nhưng chương trình vẫn có thể chạy với kết quả không mong muốn (màn hình không được xóa).Cấu trúc
sv
: Định nghĩa một cấu trúc có hai thành viên:d
(kiểufloat
) vàht
(kiểu mảng ký tựchar[10]
).p = &m;
: Gán địa chỉ của biến cấu trúcm
cho con trỏp
. Do đó,p
trỏ tớim
.(*p).d = p->d = 10;
: Dòng này gán giá trị 10 cho thành viênd
của cấu trúcm
thông qua cả hai cách truy cập bằng con trỏ:(*p).d
vàp->d
. Vìp
trỏ tớim
, cả hai cách đều tương đương và gánm.d = 10
.strcpy(m.ht, “NguyenVanTuan”);
: Sao chép chuỗi "NguyenVanTuan" vào mảngm.ht
. Tuy nhiên,m.ht
chỉ có kích thước 10 ký tự (bao gồm cả ký tự null '\0'). Chuỗi "NguyenVanTuan" dài hơn nhiều (14 ký tự + '\0'). Điều này dẫn đến lỗi tràn bộ đệm (buffer overflow). Hành vi của chương trình trong trường hợp này là không xác định. Nó có thể in ra kết quả không mong muốn, gây ra lỗi hoặc thậm chí treo chương trình.printf(“%0.1f”, m.d);
: In giá trị củam.d
(đã được gán là 10) với định dạng số thực dấu phẩy động, với độ chính xác một chữ số sau dấu phẩy. Kết quả sẽ là "10.0".printf(“%s”, m.ht);
: In chuỗim.ht
. Vì đã xảy ra tràn bộ đệm ở bước 5, nội dung củam.ht
có thể không còn là chuỗi hợp lệ và việc in có thể dẫn đến kết quả không mong muốn. Trong trường hợp này, vì bộ nhớ bị ghi đè có thể không gây ra sự cố ngay lập tức, nó có thể in ra "NguyenVanTuan" hoặc một phần của nó, hoặc thậm chí một chuỗi rác.
Dựa trên phân tích trên, chương trình có lỗi tràn bộ đệm khi sao chép chuỗi vào m.ht
. Tuy nhiên, chương trình vẫn có thể chạy và in ra một kết quả nào đó. Tuy nhiên, đáp án B có vẻ hợp lý nhất nếu bỏ qua lỗi tràn bộ đệm (chương trình in "10.0" rồi in chuỗi đã sao chép).
Tuy nhiên, do có lỗi tràn bộ đệm không xác định, đáp án chính xác nhất là C. Kết quả khác.
Trong khai báo struct Date:
- ngay chiếm 5 bits
- thang chiếm số bit mặc định của unsigned int (thường là 4 bytes = 32 bits)
- nam chiếm 11 bits
Tổng số bits sử dụng là 5 + 32 + 11 = 48 bits.
Cấu trúc tự trỏ là một loại cấu trúc dữ liệu đặc biệt, trong đó một hoặc nhiều trường của cấu trúc đó là con trỏ, và con trỏ này lại trỏ đến một biến có kiểu dữ liệu chính là kiểu của cấu trúc chứa nó. Điều này cho phép tạo ra các cấu trúc dữ liệu liên kết, ví dụ như danh sách liên kết, cây, đồ thị, v.v.
Phân tích các đáp án:
- A. Sai. Định nghĩa này chưa đủ chính xác vì nó chỉ nói đến con trỏ chứa địa chỉ của một biến cấu trúc nói chung, mà không chỉ rõ là cấu trúc đó phải có kiểu dữ liệu giống với cấu trúc chứa nó.
- B. Đúng. Định nghĩa này chính xác nhất vì nó chỉ rõ rằng con trỏ phải chứa địa chỉ của một biến cấu trúc có dạng dữ liệu giống với cấu trúc chứa con trỏ đó. Điều này tạo ra tính 'tự trỏ'.
- C. Sai. Một cấu trúc có một trường có kiểu dữ liệu giống nó là không hợp lệ trong hầu hết các ngôn ngữ lập trình, vì nó sẽ dẫn đến định nghĩa đệ quy vô hạn, không thể cấp phát bộ nhớ.
- D. Sai. Vì A và C sai.
Vậy, đáp án đúng là B.
Phát biểu đúng về danh sách móc nối là "Các phần tử của nó được lưu trữ rải rác trong bộ nhớ RAM" và "Để cài đặt danh sách móc nối phải sử dụng đến cấu trúc tự trỏ". Tuy nhiên, phương án C chính xác hơn vì nó đề cập đến một đặc điểm cốt lõi của việc *cài đặt* danh sách móc nối. Danh sách móc nối (linked list) cần các node, mỗi node chứa dữ liệu và một con trỏ đến node tiếp theo. Con trỏ này là một cấu trúc tự trỏ (self-referential structure), tức là một cấu trúc chứa một con trỏ đến một cấu trúc cùng loại. Điều này cho phép các node được liên kết với nhau một cách linh hoạt, ngay cả khi chúng nằm rải rác trong bộ nhớ. Các lựa chọn khác không đúng vì:
- A: Độ dài danh sách móc nối có thể thay đổi động trong quá trình chạy chương trình.
- B: Đúng một phần, nhưng không phải là yếu tố *duy nhất* hoặc quan trọng nhất để mô tả danh sách móc nối.
- D: Có thể xóa bất kỳ phần tử nào trong danh sách, không chỉ phần tử đầu tiên.
Danh sách móc nối (linked list) là một cấu trúc dữ liệu, trong đó các phần tử được liên kết với nhau thông qua các con trỏ. Do đó, việc thêm một phần tử mới vào danh sách móc nối có thể được thực hiện ở bất kỳ vị trí nào, không nhất thiết chỉ ở đầu danh sách hoặc không thể ở cuối danh sách. Vì vậy, phương án C là đáp án chính xác.
- Phương án A sai vì có thể thêm vào cuối hoặc giữa danh sách.
- Phương án B sai vì có thể thêm vào cuối danh sách.
- Phương án D sai vì có một phương án đúng là phương án C.

Bộ Đồ Án Tốt Nghiệp Ngành Trí Tuệ Nhân Tạo Và Học Máy

Bộ 120+ Đồ Án Tốt Nghiệp Ngành Hệ Thống Thông Tin

Bộ Đồ Án Tốt Nghiệp Ngành Mạng Máy Tính Và Truyền Thông

Bộ Luận Văn Tốt Nghiệp Ngành Kiểm Toán

Bộ 370+ Luận Văn Tốt Nghiệp Ngành Kế Toán Doanh Nghiệp

Bộ Luận Văn Tốt Nghiệp Ngành Quản Trị Thương Hiệu
ĐĂNG KÝ GÓI THI VIP
- Truy cập hơn 100K đề thi thử và chính thức các năm
- 2M câu hỏi theo các mức độ: Nhận biết – Thông hiểu – Vận dụng
- Học nhanh với 10K Flashcard Tiếng Anh theo bộ sách và chủ đề
- Đầy đủ: Mầm non – Phổ thông (K12) – Đại học – Người đi làm
- Tải toàn bộ tài liệu trên TaiLieu.VN
- Loại bỏ quảng cáo để tăng khả năng tập trung ôn luyện
- Tặng 15 ngày khi đăng ký gói 3 tháng, 30 ngày với gói 6 tháng và 60 ngày với gói 12 tháng.