What will be the output of the C program?
4 phương ánCó giải thích
int arr[5] = { 2, 3, 5, 4, 7 };
int *ptr = (&arr + 1);
printf("%d %d\n", *(arr + 1), *(ptr - 1));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: "3 7". Tên mảng arr khi dùng trong biểu thức suy biến thành con trỏ tới phần tử đầu, nên *(arr + 1) chính là arr[1], bằng 3. Nhưng &arr lại mang kiểu con trỏ tới cả mảng năm int, nên &arr + 1 nhảy qua trọn mảng và trỏ vào ô ngay sau arr[4]; gán vào int *ptr rồi ptr - 1 lùi đúng một ô int nên về arr[4], bằng 7. Chương trình in 3 7. Cần công bố khuyết điểm: bản khoá in kèm ghi 3 2, giá trị đó chỉ ra được nếu hiểu &arr + 1 nhảy một phần tử như arr + 1, khi đó ptr - 1 mới về arr[0], nên "3 2" sai. "2 3" lấy arr[0] cho vế đầu, nhưng vế đầu là arr[1]. "2 6356728" giả định đọc phải rác ngoài mảng, trong khi ptr - 1 vẫn trỏ vào đúng phần tử cuối của arr.
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ỏiWhich function in C is used to deallocate dynamically allocated memory?Có lời giảiCâu hỏiWhat will be printed when the following code is executed?
#include <stdio.h>
int main() {
int a[] = {1,2,3,4,5,6};
int* p = a;
p += 3;
printf("%d, %d",*(a+3), *(p++));
return 0;
}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