Danh sách câu hỏi của đề

Câu hỏi: PRF192 Cơ sở lập trình – Bộ ôn tập số 5

50 câu trắc nghiệm kèm lời giải của môn PRF192 - Cơ sở lập trình, xếp đúng thứ tự trong đề. Trang 2/3 — câu 21–40.

Danh sách câu hỏi

40/50 câuCòn 10
Đề bài
#include<stdio.h>
int main()
{
    int a=10,b=20,c=30;
    while(a>1)
    {
        if(b%2!=0)
            a/=10;
        b--;
        c*=2;
    }
    printf("%d ; %d ; %d",a,b,c);
    return 0;
}
A1 ; 18 ; 120
B10 ; 19 ; 60
C1 ; 20 ; 60
D10 ; 19 ; 120
Lời giải
Đáp án đúng: "1 ; 18 ; 120". Điểm then chốt là phạm vi khối do ngoặc nhọn quyết định, không do thụt lề: lệnh if trong vòng while không có cặp ngoặc nhọn nên nó chỉ ôm đúng một lệnh a/=10, còn b-- và c*=2 nằm ngoài if và chạy ở mọi lượt dù được thụt vào trông như thuộc nhánh đó. Lượt thứ nhất b bằng 20 chia hết cho 2 nên a giữ nguyên 10, b về 19, c lên 60. Lượt thứ hai b bằng 19 là số lẻ nên a/=10 đưa a về 1, b về 18, c lên 120. Kiểm tra lần ba, a bằng 1 không còn lớn hơn 1 nên vòng lặp dừng. Ý "10 ; 19 ; 60" sai vì nó dừng lại sau một lượt, trong khi điều kiện a>1 vẫn đúng nên vòng lặp phải chạy tiếp. Ý "1 ; 20 ; 60" sai vì b-- chạy mỗi lượt nên b không thể giữ nguyên 20. Ý "10 ; 19 ; 120" sai vì c đã nhân đôi hai lần thì vòng lặp đã đi hai lượt, mà cách duy nhất để vòng lặp kết thúc là a bị chia về 1.
Mở trang câu hỏi này →
Đề bài
#include<stdio.h>

int isTriangle(float a, float b, float c)
{
    if ((a>0)&&(b>0)&&(c>0)&&(a<b+c)&&(b<c+a)&&(c<a+b))
        return 1;
    else
        return 0;
}

int main()
{
    float a = 1, b = 1, c = 1.25;
    if (isTriangle(a, b, c))
        printf("%.2f, %.2f, %.2f: a triangle.\n", a, b, c);
    else
        printf("%.2f, %.2f, %.2f: not a triangle.\n", a, b, c);
    return 0;
}
Aa, b, c: a triangle
B1.00, 1.00, 1.25: a triangle
C1, 1, 1.25: a triangle
D1.00, 1.00, 1.25: not a triangle
Lời giải
Đáp án đúng: "1.00, 1.00, 1.25: a triangle". Hàm isTriangle kiểm ba cạnh dương và ba bất đẳng thức tam giác: với a bằng 1, b bằng 1 và c bằng 1.25 thì 1 nhỏ hơn 2.25, 1 nhỏ hơn 2.25 và 1.25 nhỏ hơn 2, nên cả chuỗi phép và cho kết quả đúng và hàm trả về 1. Giá trị khác không được lệnh if trong main coi là điều kiện đúng nên nhánh in a triangle được chạy. Đặc tả %.2f buộc in số thực với đúng hai chữ số sau dấu chấm, vì thế 1 hiện ra thành 1.00 còn 1.25 giữ nguyên. Ý "a, b, c: a triangle" sai vì chuỗi định dạng dùng %.2f nên chỗ đó in giá trị, không in tên biến. Ý "1, 1, 1.25: a triangle" sai vì %.2f không bao giờ bỏ các chữ số thập phân thừa, muốn ra dạng gọn như vậy phải dùng đặc tả khác. Ý "1.00, 1.00, 1.25: not a triangle" sai vì điều kiện tam giác đã thoả nên nhánh else không được chạy.
Mở trang câu hỏi này →
Awhile (condition) { statements; }
B(condition){ statements ;}
Cwhile (condition) { statements };
D{ statements } while (condition);
Lời giải

Đáp án đúng: "

Lời giải
while (condition) {
  statements;
}

". Vòng while chuẩn gồm từ khoá while, điều kiện trong ngoặc tròn, rồi một câu lệnh làm thân; thân là cả khối khi bọc trong ngoặc nhọn, và mỗi câu lệnh bên trong khối phải kết thúc bằng dấu chấm phẩy. Sau ngoặc nhọn đóng không cần dấu chấm phẩy vì khối đã là một câu lệnh hoàn chỉnh. Dạng "(condition){ statements ;}" thiếu hẳn từ khoá while nên trình dịch chỉ thấy một biểu thức rồi một khối rời rạc. Dạng "

Lời giải
while (condition) {
  statements
}

;" đặt dấu chấm phẩy sai chỗ: lệnh bên trong khối bị bỏ dấu kết thúc, còn dấu chấm phẩy lại nằm sau ngoặc nhọn đóng. Dạng "{ statements } while (condition); " là do while nhưng mất từ khoá do mở đầu, nên khối và phần while thành hai mảnh không gắn với nhau.

Mở trang câu hỏi này →
Đề bài
#include<stdio.h>
int main()
{
    const int a=5;
    if(a>3)
        a++;
        break;
    else
        a--;
    printf("%d",a);
    return 0;
}
ACompile time error
B6
C4
D5
Lời giải
Đáp án đúng: "Compile time error". Phạm vi khối do ngoặc nhọn quyết định, không do thụt lề: nhánh if ở đây không có ngoặc nhọn nên chỉ ôm đúng một lệnh là lệnh tăng a, còn lệnh break phía sau đã nằm ngoài if dù được thụt vào ngang hàng. Vì vậy khi gặp từ khoá else, trình biên dịch không còn if nào để ghép nên báo lỗi ngay. Mã này còn hai lỗi nữa: break chỉ hợp lệ trong vòng lặp hoặc trong switch, mà đây không có cái nào; và a khai báo const nên cả lệnh tăng lẫn lệnh giảm đều là ghi vào đối tượng chỉ đọc. Giá trị "6" giả định lệnh tăng chạy được trên một hằng rồi chương trình in ra sau đó. Giá trị "4" ứng với nhánh giảm chạy, nhưng điều kiện a lớn hơn 3 với a bằng 5 vốn đã đúng. Giá trị "5" giả định không nhánh nào chạy, trong khi vấn đề thật là chương trình không dịch nổi.
Mở trang câu hỏi này →
ALocal variables within a function are declared and initialized each time the function is called.
BLocal variables within a function can be accessed from any other function in the program.
CLocal variables within a function retain their value between different function calls.
DLocal variables within a function can be declared outside the function and still maintain local scope.
Lời giải
Đáp án đúng: "Local variables within a function are declared and initialized each time the function is called." Biến cục bộ mặc định có lớp lưu trữ tự động: chỗ cho nó được dành trên khung ngăn xếp lúc vào hàm và mất đi lúc ra hàm, nên mỗi lần gọi là một bản mới, và nếu khai báo kèm giá trị khởi tạo thì phép khởi tạo chạy lại từng lần. Câu "Local variables within a function can be accessed from any other function in the program." sai vì tên biến cục bộ chỉ thấy được trong khối khai báo nó; hàm khác muốn chạm vào phải nhận địa chỉ qua tham số. Câu "Local variables within a function retain their value between different function calls." là tính chất của biến thêm từ khoá static, thứ sống suốt chương trình. Câu "Local variables within a function can be declared outside the function and still maintain local scope." tự mâu thuẫn: khai báo ngoài hàm là có phạm vi tệp, không còn cục bộ.
Mở trang câu hỏi này →
26Which is a function in C language?6 lựa chọn
Ais_prime()
B#include()
Cint()
Dif()
Ereturn()
F2ndElement()
Lời giải
Đáp án đúng: "is_prime()". Hàm trong C là khối mã có tên do người lập trình đặt theo luật định danh: mở đầu bằng chữ cái hoặc dấu gạch dưới, tiếp theo là chữ, số hoặc gạch dưới, và không được trùng từ khoá; is_prime thoả hết nên là tên hàm hợp lệ, kiểu tên quen dùng cho hàm kiểm tra số nguyên tố. Dòng "#include()" không phải hàm mà là chỉ thị tiền xử lý, được xử lý trước khi biên dịch và chỉ để chèn nội dung một tệp tiêu đề. Tên "int()" lấy đúng từ khoá kiểu int làm tên, trình biên dịch không cho phép. Tên "if()" cũng là từ khoá, đó là lệnh rẽ nhánh của ngôn ngữ chứ không phải lời gọi hàm. Tên "return()" là từ khoá trả về giá trị, thêm cặp ngoặc cũng không biến nó thành hàm. Tên "2ndElement()" mở đầu bằng chữ số nên vi phạm luật định danh ngay ở ký tự đầu tiên.
Mở trang câu hỏi này →
Aint minus(int a; int b) {return (a - b);}
Bint minus (int a, b) {return (a - b);};
Cint minus (int a, int b) {return (a - b);}
Dint minus (int a, b) {return (a - b);}
Lời giải

Đáp án đúng: "int minus (int a, int b) { return (a - b); }". Định nghĩa hàm theo lối nguyên mẫu đòi mỗi tham số mang đủ kiểu riêng, các tham số ngăn nhau bằng dấu phẩy, và thân hàm là một khối trong ngoặc nhọn; khoảng trắng thừa giữa các thành phần vô hại vì trình dịch bỏ qua. Dạng "int minus(int a; int b) { return (a - b); }" dùng dấu chấm phẩy ngăn hai tham số, thứ chỉ hợp lệ trong danh sách khai báo biến thường, nên danh sách tham số vỡ ngay. Dạng "int minus (int a, b) { return (a - b); }" để b không kiểu; chuẩn C hiện hành đã bỏ quy tắc ngầm hiểu kiểu int nên tham số thiếu kiểu bị báo lỗi. Dạng "int minus (int a, b) { return (a - b); };" mắc đúng lỗi thiếu kiểu đó, lại thêm một dấu chấm phẩy trống sau thân hàm, thứ chuẩn không cho phép ở mức tệp.

Mở trang câu hỏi này →
28Suppose there is a function in C as follows:4 lựa chọncó code
Đề bài
double g (double x, double y){
    return (x - 2)*(x - 2) + y*y;
}

What is the value of z after executing the statement z=g(2,0)?

A0
B4
C2
D8
Lời giải
Đáp án đúng: "0". Hàm g nhận hai số thực và trả về giá trị của biểu thức (x - 2)*(x - 2) + y*y. Thay x bằng 2 thì x - 2 cho 0 nên tích thứ nhất bằng 0; thay y bằng 0 thì y*y cũng bằng 0; tổng hai phần là 0, và vì kiểu trả về là double nên z nhận 0 ở dạng số thực. Hai đối số viết dưới dạng hằng nguyên nhưng được chuyển ngầm sang double khi truyền vào, nhờ nguyên mẫu hàm đã khai rõ kiểu tham số. Giá trị "4" là kết quả nếu bỏ sót phép trừ, tức tính x*x với x bằng 2. Giá trị "2" chỉ là chính đối số thứ nhất, không phải giá trị của biểu thức. Giá trị "8" không khớp với bất cứ cách thay số nào: với x bằng 2 thì số hạng đầu luôn triệt tiêu và y bằng 0 làm số hạng sau cũng triệt tiêu, muốn có 8 thì biểu thức phải có thêm số hạng khác. Lời gọi hàm chỉ thay giá trị vào tham số rồi tính, không có bước nào khác.
Mở trang câu hỏi này →
29What is the output of the following code snippet?4 lựa chọncó code
Đề bài
#include <stdio.h>
int num(int a, int b){
    int sum;
    sum = a + b;
    return sum;
}

int main()
{
    int a, b, result;
    a = 10;
    b= 12;
    result = num(a, b);
    printf("%d", result);
    return 0;
}
A22
B10
C12
D21
Lời giải
Đáp án đúng: "22". Hàm num nhận hai tham số rồi trả về tổng của chúng; main gọi num(a, b) với a bằng 10 và b bằng 12 nên a + b bằng 22, giá trị đó đi ra ngoài qua lệnh return, được gán cho result rồi in. Tham số trong C truyền theo giá trị nên hàm làm việc trên bản sao và không đổi được a hay b ở main, nhưng kết quả vẫn ra ngoài được nhờ return. "10" chỉ là giá trị của a, ứng với việc hiểu hàm trả về tham số thứ nhất. "12" chỉ là giá trị của b, ứng với việc hiểu hàm trả về tham số còn lại. "21" không khớp phép cộng nào của hai số này, nó lệch một đơn vị so với tổng thật.
Mở trang câu hỏi này →
30What does the following program print?4 lựa chọncó code
Đề bài
#include <stdio.h>

float max(float a, float b) {
    return a > b ? a : b;
}

int main() {
    float x = 5.5, y = 4.5, z = 2;
    printf("%f", max(max(x++, y--), ++z));

    return 0;
}
A5.5
B5.500000
C4.500000
DAn error will be raised.
Lời giải
Đáp án đúng: "5.500000". Hàm max dùng toán tử ba toán hạng để trả về số lớn hơn. Lời gọi trong cùng là max(x++, y--): cả hai phép tăng giảm đều ở dạng hậu tố nên truyền sang hàm giá trị cũ, tức 5.5 và 4.5, và hàm cho 5.5; sau đó x thành 6.5, y thành 3.5 nhưng không còn ai đọc. Lời gọi ngoài so 5.5 với ++z, dạng tiền tố nên z tăng trước rồi truyền sang 3.0, kết quả vẫn là 5.5. Đặc tả %f in số thực với sáu chữ số thập phân mặc định, nên màn hình hiện 5.500000. Dòng "5.5" là cách con người viết số đó, không phải cách printf in với %f. Dòng "4.500000" là giá trị cũ của y, thứ bị loại ngay ở lời gọi trong cùng. Kết luận "An error will be raised." sai vì tham số float, phép tăng giảm trên số thực và việc lồng hai lời gọi đều hợp lệ.
Mở trang câu hỏi này →
AThe getchar() function is defined in the <stdio.h> header file.
Bgetchar() gets a string from stdin.
Cgetchar() retrieves a single character from the standard input stream buffer without translating the input.
Dgetchar() gets a character (an unsigned char) from stdin.
Lời giải

Đáp án đúng: "getchar() gets a string from stdin." Câu hỏi tìm phát biểu sai, và đây đúng là phát biểu sai: getchar không đọc chuỗi, nó lấy đúng một ký tự rồi trả về dưới dạng int để còn chỗ cho giá trị báo hết tệp; muốn đọc cả dòng phải dùng fgets. Câu "The getchar() function is defined in the <stdio.h> header file." là phát biểu đúng, hàm thuộc thư viện vào ra chuẩn. Câu "getchar() retrieves a single character from the standard input stream buffer without translating the input." cũng đúng: hàm lấy một ký tự từ vùng đệm của luồng vào chuẩn và không diễn dịch gì thêm. Câu "getchar() gets a character (an unsigned char) from stdin." đúng nốt, vì ký tự đọc được hiểu như unsigned char rồi nâng lên int. Ba phát biểu đúng ấy không thể là thứ câu hỏi đang tìm.

Mở trang câu hỏi này →
A-6 and 5.
B-5 and 5.
C-6 and 6.
D-5 and 6.
Lời giải
Đáp án đúng: "-6 and 5." Hàm floor của thư viện toán lấy số nguyên lớn nhất không vượt quá đối số, tức luôn làm tròn xuống phía âm vô cực, chứ không cắt phần thập phân và cũng không làm tròn về số gần nhất. Với -5.9, các số nguyên không vượt quá nó là -6, -7 và nhỏ hơn, lớn nhất trong đó là -6. Với 5.9, số nguyên lớn nhất không vượt quá là 5. Cặp "-5 and 5." là kết quả của phép cắt phần thập phân, tức hành vi của ép kiểu sang int, và với số âm nó cho giá trị lớn hơn floor. Cặp "-6 and 6." trộn floor cho số âm với ceil cho số dương. Cặp "-5 and 6." chính là làm tròn ra xa số không, không phải floor. Cần nhớ floor trả về double, nên in bằng %f sẽ thấy -6.000000 và 5.000000.
Mở trang câu hỏi này →
33What does the following program print?4 lựa chọncó code
Đề bài
#include <stdio.h>

int main()
{
    int a = 4;
    int *b = &a;

    a -= 1;
    *b -= 1;
    printf("%d %d", a, *b);

    return 0;
}
A2 2
B2 1
C3 1
D3 3
Lời giải
Đáp án đúng: "2 2". Câu int *b = &a cho b giữ địa chỉ của a, nên từ đó a và *b là hai cách gọi cùng một ô nhớ chứ không phải hai bản sao. Lệnh a -= 1 hạ ô đó từ 4 xuống 3, rồi *b -= 1 hạ tiếp chính ô đó xuống 2; vậy cả hai cách đọc đều cho 2 và printf in hai số giống nhau. Dãy "2 1" giả định *b có ô riêng cũng bắt đầu từ 4 rồi chỉ bị trừ một lần, tức hiểu con trỏ thành bản sao. Dãy "3 1" giả định a chỉ chịu phép trừ thứ nhất còn phép trừ thứ hai tác động lên một vùng khác. Dãy "3 3" chỉ đúng nếu phép trừ qua con trỏ không có tác dụng gì, trong khi *b -= 1 ghi thẳng vào ô mà b trỏ tới.
Mở trang câu hỏi này →
A*/ Comments */
B** Comment **
C/* Comment */
D{ Comment }
Lời giải
Đáp án đúng: "/* Comment */". Chú thích khối trong C mở bằng dấu gạch chéo rồi dấu sao và đóng bằng dấu sao rồi gạch chéo; phần giữa bị bộ tiền xử lý thay bằng một khoảng trắng nên trình biên dịch không bao giờ thấy nội dung đó. Cách viết "*/ Comments */" đảo chỗ hai ký tự mở, mà dấu mở buộc phải là gạch chéo trước dấu sao, nên dòng đó bị đọc như biểu thức và báo lỗi. Cách viết "** Comment **" chỉ có hai dấu sao, ngôn ngữ đọc chúng thành phép nhân hoặc phép lấy nội dung con trỏ, không mở chú thích nào cả. Cách viết "{ Comment }" là cú pháp chú thích của Pascal, còn trong C cặp ngoặc nhọn tạo khối lệnh nên nội dung bên trong vẫn bị đòi phải là lệnh hợp lệ. Dạng chú thích thứ hai mà C cho phép là hai dấu gạch chéo kéo tới hết dòng.
Mở trang câu hỏi này →
35What is a pointer in C programming?4 lựa chọn
AA variable stores anything
BA variable stores address of another variable or a variable stores address of the dynamically allocated memory
CAn address in the memory
DA variable stores any number
Lời giải
Đáp án đúng: "A variable stores address of another variable or a variable stores address of the dynamically allocated memory". Con trỏ trước hết là một biến, nên nó có ô nhớ riêng và có kiểu; thứ nó chứa là địa chỉ, có thể là địa chỉ của một biến khác lấy bằng toán tử lấy địa chỉ, hoặc địa chỉ của khối nhớ xin được từ malloc. Kiểu của con trỏ không để trang trí: nó quyết định bước nhảy khi làm phép tính trên con trỏ và quyết định cách đọc dữ liệu tại địa chỉ ấy. Ý "A variable stores anything" sai vì nói vậy thì mọi biến đều là con trỏ, định nghĩa mất hết ý nghĩa. Ý "An address in the memory" sai vì nó lẫn giữa giá trị và vật chứa: địa chỉ là nội dung mà con trỏ giữ, còn con trỏ là biến giữ nội dung đó. Ý "A variable stores any number" sai vì con trỏ không chứa số tuỳ ý, nó chỉ hợp lệ khi giữ địa chỉ của một ô nhớ có thật hoặc giá trị rỗng.
Mở trang câu hỏi này →
A1 bytes
B2 bytes
C4 bytes
D8 bytes
Lời giải
Đáp án đúng: "4 bytes". Kiểu của con trỏ quyết định trình dịch đọc ghi bao nhiêu byte khi lấy giá trị qua dấu sao, và bước nhảy khi cộng trừ con trỏ. Trên các trình dịch phổ thông ngày nay, kiểu int chiếm bốn byte, nên *p làm việc trên bốn byte và p + 1 nhảy bốn byte. Số "1 bytes" là kích thước của char, kiểu duy nhất mà chuẩn ấn định bằng một byte. Số "2 bytes" là kích thước thường thấy của short, và cũng là kích thước int trên những trình dịch mười sáu bit rất cũ. Số "8 bytes" là kích thước của double hay long long, và cũng là chỗ chứa chính biến con trỏ trên nền sáu mươi tư bit, nhưng câu hỏi hỏi vùng nhớ được truy cập qua con trỏ chứ không hỏi chỗ chứa con trỏ.
Mở trang câu hỏi này →
Đề bài
void input(int* a, int n);
AIt is a pointer to the first element of the array
BIt holds the array size
CIt defines the function return type
DIt stores the index of the element
Lời giải
Đáp án đúng: "It is a pointer to the first element of the array". Trong C mảng không truyền được theo giá trị: viết tên mảng ở lời gọi thì nó tự suy biến thành địa chỉ phần tử đầu, nên tham số int* a nhận đúng địa chỉ đó, và trong hàm a[i] tương đương *(a + i), cho phép hàm ghi thẳng vào mảng của nơi gọi. Vì địa chỉ không mang theo số phần tử, hàm cần thêm tham số n, và đó mới là chỗ giữ kích thước, nên "It holds the array size" gán sai vai. Mô tả "It defines the function return type" sai vì kiểu trả về là void, viết trước tên hàm, chẳng liên quan tới danh sách tham số. Mô tả "It stores the index of the element" cũng sai vì chỉ số là một số nguyên thường, dùng bên trong hàm khi duyệt mảng, không phải một con trỏ.
Mở trang câu hỏi này →
Aprintf("a[3] = %d\n", a[3]);
Bprintf("*(a + 3) = %d\n", *(a + 3));
Cprintf("&a[3] = %p\n", (void*)&a[3]);
DAll the above
Lời giải

Đáp án đúng: "All the above". Phần tử thứ tư nằm ở chỉ số 3 vì chỉ số đếm từ 0, và chuẩn C định nghĩa a[3] chính là *(a + 3), nên hai lối viết khác nhau trên mặt chữ lại sinh ra cùng một phép truy cập; lấy &a[3] thì chạm tới đúng phần tử đó ở mức địa chỉ. Cả ba lệnh in đều hợp lệ và đều nói về phần tử thứ tư, nên chỉ lựa chọn gộp mới trả lời đủ. Lệnh "printf("a[3] = %d\n", a[3]);" đúng nhưng chỉ là một trong ba cách. Lệnh "printf("*(a + 3) = %d\n", *(a + 3));" cũng đúng và theo định nghĩa là cùng một thao tác với lối dùng chỉ số, nên không thể đúng một mình. Lệnh "printf("&a[3] = %p\n", (void*)&a[3]); " in địa chỉ của phần tử thứ tư, vẫn là truy cập hợp lệ tới nó, chỉ khác là lấy địa chỉ thay vì lấy giá trị.

Mở trang câu hỏi này →
39Assume we have the following code:4 lựa chọncó code
Đề bài
int i=4;
int *p = &i;

What is the result of the following expression: ++*p?

A5
B4
C9
D12
Lời giải
Đáp án đúng: "5". Con trỏ p giữ địa chỉ của i, nên biểu thức lấy nội dung chỗ p trỏ tới chính là biến i và dùng được ở cả hai vai, đọc lẫn ghi. Hai toán tử một toán hạng ở đây cùng mức ưu tiên và kết hợp từ phải sang trái, nên phép tăng được áp lên giá trị đã lấy ra: i tăng từ 4 lên 5 trước khi biểu thức cho giá trị, và giá trị đó cũng là 5. Giá trị "4" là giá trị cũ của i, nó chỉ xuất hiện khi dùng dạng tăng sau viết với ngoặc quanh phần lấy nội dung, khi ấy biểu thức cho 4 còn i vẫn thành 5. Giá trị "9" cần cộng thêm năm đơn vị, không có phép nào trong mã làm việc đó. Giá trị "12" cần một phép nhân hoặc một lượng cộng lớn hơn hẳn, cũng không có nguồn nào sinh ra. Điều dễ lẫn là dạng tăng đặt sau tên con trỏ, vì khi đó phép tăng tác động lên con trỏ chứ không lên giá trị được trỏ tới.
Mở trang câu hỏi này →
AAddress of the variable a
BValue of the variable a or 5
CSize of the variable a or 8
DType of the variable a or double
Lời giải
Đáp án đúng: "Address of the variable a". Dấu và đứng trước một toán hạng là phép lấy địa chỉ: nó cho biết vị trí trong bộ nhớ nơi biến được cấp chỗ, và kiểu của kết quả là con trỏ tới kiểu của biến, ở đây là con trỏ double. Giá trị này thường in bằng %p sau khi ép sang con trỏ void, và chính nó là thứ phải truyền cho scanf hay cho hàm muốn ghi vào biến. Mô tả "Value of the variable a or 5" là thứ lấy được khi đọc chính a, không cần toán tử nào; dù a khởi tạo từ số nguyên 5 thì nó vẫn là double mang giá trị 5.0. Mô tả "Size of the variable a or 8" là việc của sizeof. Mô tả "Type of the variable a or double" không phải giá trị mà biểu thức C trả về được; kiểu chỉ tồn tại lúc dịch, chương trình đang chạy không có phép toán nào cho ra tên kiểu.
Mở trang câu hỏi này →