What is the result displayed on the screen of the following program?

4 phương ánCó giải thích
Đề bài
#include <stdio.h>
void level2(int** ppa)
{
    printf("%d\n", **ppa);
}
void level1(int* pa)
{
    level2(&pa);
}
main()
{
    int a = 10;
    level1(&a);
}

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "10". Biến a mang giá trị 10; lời gọi level1(&a) truyền địa chỉ của a nên tham số pa trỏ tới a. Trong level1, phép lấy địa chỉ của chính tham số pa cho một con trỏ hai cấp, và level2 nhận nó dưới tên ppa. Bỏ một lớp sao thì được lại con trỏ pa, bỏ lớp thứ hai thì lấy nội dung chỗ pa trỏ tới, tức a, nên biểu thức hai lớp sao cho 10 và đặc tả %d in ra số nguyên 10. Kết quả "The address of variable a" ứng với việc chỉ bỏ một lớp sao. Kết quả "The address of the pointer pa" ứng với việc in thẳng ppa mà không bỏ lớp nào. Kết quả "The address of the double pointer ppa" còn cần lấy địa chỉ của ppa, thứ mã này không làm. Thêm nữa, ba kết quả địa chỉ đều lệch kiểu với đặc tả đang dùng: in địa chỉ phải dùng %p, còn %d luôn đọc đối số như một số nguyên.

Cùng phần 5

Xuất hiện trong 1 bộ đề