Kết quả của chương trình sẽ là gì? #include
Đáp án đúng: C
Câu hỏi liên quan
Sau đó, gán `k = ++i || ++j;`
`++i` là tiền tố tăng, nên `i` tăng lên 2 trước khi được sử dụng trong biểu thức. Vì `i = 2` khác 0 (true), nên biểu thức `++i || ++j` sẽ chỉ xét `++i`, và không xét `++j` (do `||` là phép toán OR, nếu vế trái đúng thì không cần xét vế phải).
Vậy, `k = i = 2`.
Tiếp theo, gán `k && ++j;`
`k && ++j` nghĩa là nếu `k` khác 0 (true) thì thực hiện `++j`. Vì `k = 2` khác 0, nên `++j` được thực hiện. `++j` là tiền tố tăng, nên `j` tăng lên 6 trước khi được sử dụng. Tuy nhiên, giá trị của biểu thức `k && ++j` không được gán cho bất kỳ biến nào, do đó giá trị của `j` sau khi tăng lên sẽ không ảnh hưởng đến các biến khác.
Cuối cùng, in ra giá trị của `i`, `j`, `k`.
`printf("%d %d %d", i, j, k);`
Vậy, kết quả in ra là `2 5 2`.
Tuy nhiên không có đáp án nào trùng với kết quả tính toán, vậy đáp án đúng là D. Một cái khác
Struct `A` có 3 trường: `x` (char), `y` (float), `z` (int). Do có hiện tượng padding trong struct để đảm bảo các biến thành viên được căn chỉnh theo địa chỉ thích hợp, nên kích thước của struct `A` sẽ được tính như sau:
- `x` (char): 1 byte
- `y` (float): 4 byte. `x` sẽ được padding thêm 3 byte để `y` bắt đầu ở địa chỉ chia hết cho 4.
- `z` (int): 4 byte.
Tổng kích thước struct `A` là 1 + 3 + 4 + 4 = 12 bytes.
Mảng `arr` có 5 phần tử, mỗi phần tử là kiểu struct `A`. Vậy kích thước của mảng là 5 * 12 = 60 bytes.
`A *p = arr;` khai báo con trỏ `p` kiểu `A*` và gán cho nó địa chỉ của phần tử đầu tiên trong mảng `arr`.
`A *q = arr + 3;` khai báo con trỏ `q` kiểu `A*` và gán cho nó địa chỉ của phần tử thứ 4 trong mảng `arr` (arr[3]).
`long k = q - p;` tính khoảng cách giữa địa chỉ của `q` và `p`. Do `q` và `p` đều là con trỏ kiểu `A*`, kết quả phép trừ sẽ là số phần tử kiểu `A` giữa `q` và `p`, tức là 3. Vì k là long, có kích thước 4 byte, nên giá trị của k sẽ là 3.
`int t = (int)( (char*)q - (char*)p );` ép kiểu `q` và `p` sang `char*`, sau đó tính hiệu. Lúc này, hiệu là số byte giữa hai con trỏ. Khoảng cách giữa `q` và `p` là 3 * sizeof(A) = 3 * 12 = 36 bytes. Vì t là int, kích thước 4 byte, nên giá trị của t sẽ là 36.
`char h = (char)( (int)q - (int)p );` ép kiểu `q` và `p` sang `int`, sau đó tính hiệu (36). Vì h là char, kích thước 1 byte, nên giá trị của h sẽ là 36 % 256 = 36.
Vậy, kết quả in ra sẽ là: 8 4 1.
Trong C++, cout
(viết tắt của "console output") là một đối tượng thuộc lớp ostream
, được sử dụng để xuất dữ liệu ra thiết bị xuất chuẩn (thường là màn hình). Toán tử được sử dụng để đưa dữ liệu từ chương trình vào cout
là toán tử "chèn" <<
. Ví dụ: cout << "Hello, world!";
sẽ in dòng chữ "Hello, world!" ra màn hình.
Các lựa chọn khác không đúng vì:
>>
là toán tử "trích xuất", thường được sử dụng vớicin
để nhập dữ liệu từ bàn phím.\\
không phải là một toán tử hợp lệ trong C++. Nó thường được sử dụng để biểu diễn một dấu gạch chéo ngược trong một chuỗi ký tự.||
là toán tử "hoặc" logic, được sử dụng để kết hợp hai biểu thức điều kiện.
Trong C/C++, để khai báo một con trỏ (pointer), ta sử dụng dấu *
trước tên biến. Con trỏ là một biến lưu trữ địa chỉ của một biến khác.
A. int x; Khai báo một biến kiểu số nguyên (integer) có tên là x. Đây không phải là con trỏ.
B. int &x; Khai báo một tham chiếu (reference) đến một biến kiểu số nguyên. Tham chiếu khác với con trỏ. Đây không phải là con trỏ.
C. ptr x; Không phải là cú pháp hợp lệ trong C/C++. ptr
không phải là một kiểu dữ liệu dựng sẵn (built-in type) hoặc kiểu dữ liệu do người dùng định nghĩa (user-defined type) hợp lệ để khai báo một con trỏ.
D. int *x; Khai báo một con trỏ có tên là x, con trỏ này sẽ trỏ tới một biến kiểu số nguyên (integer). Đây là cách khai báo con trỏ đúng.

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.