What is the output of the following code snippet?
4 phương ánCó giải thích
void main(){
int x = 4;
int *p = &x;
int *k = p++;
int r = p - k;
printf("%d", r);
}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: "1". Phép tăng sau p++ nộp cho k giá trị cũ của p rồi mới đẩy p sang ô int kế tiếp, nên k trỏ vào x còn p trỏ vào ô liền sau. Hiệu hai con trỏ cùng kiểu trong C được tính theo số phần tử chứ không theo byte: trình biên dịch lấy khoảng cách byte rồi chia cho kích thước kiểu, vì vậy p trừ k bằng 1. Ý "4" sai vì 4 chính là khoảng cách tính bằng byte khi int chiếm 4 byte, tức là bỏ qua bước chia cho kích thước kiểu; nó lại trùng với giá trị của x nên càng dễ nhầm. Ý "5" sai vì không có phép tính nào cộng thêm 1 vào giá trị của x. Ý "0" sai vì nó cho rằng p++ chưa kịp có tác dụng hoặc k mãi mãi đi theo p; cần công bố rằng đây là khuyết điểm của đề, bộ khoá đi kèm ghi đúng giá trị 0 trong khi ngữ nghĩa của phép tăng sau buộc p và k phải lệch nhau đúng một phần tử.
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 2 bộ đề
Đi tiếp từ đây