What will be the output of the following program?
4 phương ánCó giải thích
int main()
{
int i = 100;
int *p = &i;
*p +=2;
printf("%d, %d", i, *p);
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: "102, 102". Con trỏ p được gán địa chỉ của i nên nó trỏ thẳng vào ô nhớ của i; phép cộng dồn qua dấu sao không tạo bản sao nào mà cộng 2 ngay tại ô đó, vì vậy i trở thành 102. Khi printf chạy, cả i và nội dung được p trỏ tới đều đọc cùng một ô nhớ nên hai số in ra giống nhau; đó là bản chất của bí danh qua con trỏ, hai cách gọi tên cho cùng một vùng dữ liệu. Lựa chọn "100, 102" đòi i giữ nguyên trong khi vùng được trỏ tới đổi, chuyện chỉ xảy ra nếu p trỏ vào một biến khác. Lựa chọn "100, 100" là kết quả nếu phép cộng áp lên bản thân con trỏ, khi đó i không đổi nhưng con trỏ lại đọc sang vùng nhớ lạ. Lựa chọn "102, 100" vừa đòi i đổi vừa đòi phép lấy nội dung cho ra giá trị cũ, mâu thuẫn vì chúng là cùng một ô nhớ.
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