What will be the output of the following program?
4 phương ánCó giải thích
int main()
{
int i = 1;
int *p = &i;
int **k = &p;
i+=2;
printf("%d%d%d", *p, **k, *(*k));
getchar();
return 0;
}Các phương án trả lời
Chọn một phương ánLời giảiChọn phương án để mở
Đáp án đúng: "333". Biến i ban đầu bằng 1, p giữ địa chỉ của i, còn k giữ địa chỉ của p nên k là con trỏ hai cấp. Lệnh i+=2 nâng i lên 3 ngay trong ô nhớ của i. Vì p và k không sao chép giá trị mà chỉ ghi lại đường đi tới ô nhớ đó, mọi lần truy xuất về sau đều đọc ra giá trị mới nhất: *p lấy nội dung ô của i là 3, **k đi hai chặng từ k sang p rồi sang i cũng ra 3, và *(*k) chỉ là cách viết tường minh của **k nên cũng ra 3. Chuỗi định dạng có ba đặc tả %d liền nhau không chen dấu cách nên ba số in sát nhau thành 333. Ý "111" sai vì nó ứng với việc bỏ qua lệnh i+=2, hoặc tưởng con trỏ chụp lại giá trị ngay lúc được gán. Ý "222" sai vì không có phép tính nào trong chương trình sinh ra giá trị 2. Ý "Compile error" sai vì khai báo con trỏ hai cấp và phép lấy nội dung hai lần đều hợp lệ.
Cùng phần 5
What will be the output of the following C code?
#include <stdio.h>
void main()
{
int *ptr, a = 10;
ptr = &a;
*ptr += 1;
printf("%d,%d\n", *ptr, a);
}Có lời giảiCâu hỏi(Choose 1 answer)
What is the output of this C code?
#include <stdio.h>
#include <conio.h>
int main() {
int n = 267, *pn = &n;
char* pc = pn;
*pc = 0;
printf("n = %d", n);
return 0;
}Có lời giảiCâu hỏiWhat will be the output of the C program?
int arr[5] = { 2, 3, 5, 4, 7 };
int *ptr = (&arr + 1);
printf("%d %d\n", *(arr + 1), *(ptr - 1));Có lời giảiCâu hỏiCả 41 câu của chủ đề41 câu
Xuất hiện trong 1 bộ đề
Đi tiếp từ đây