You are on page 1of 32

3.

1
Hàng 1: in ra địa chỉ của biến a

- Vì con trỏ b đang trỏ tới a

Hàng 2: in ra giá trị của biến a là 3

- Vì đang được con trỏ b trỏ tới (vì là cout << *b;)

Hàng 3: in ra địa chỉ của biến b

- Vì cout là cout ra &b mà &b là & con trỏ b nên sẽ xuất ra địa chỉ biến a

Hàng 4: in ra giá trị biến a

- Vì a không là con trỏ chỉ là biến được gán trị 3 (int a =3;)

Hàng 5: in ra địa chỉ của biến a

- Vì cout << &a


 Đoạn code không có lỗi
3.5
Ở 5 dòng đầu tiên

- Dòng 1: lần lượt khai báo biến x,y kiểu dữ liệu int
- Dòng 2: khai báo biên y kiểu dữ liệu float
- Dòng 3: khai báo biến ch kiểu dữ liệu char và con trỏ chp với kiểu dữ liệu char
- Dòng 4: khai báo con trỏ ip1 và ip2 kiểu dữ liệu int
- Dòng 5: khai báo con trỏ fp với kiểu float

Ở 4 dòng tiếp theo

- Dòng 6: gán biến x là 100


- Dòng 7: gán biến y là 20.0
- Dòng 8: gán biến z à 50
- Dòng 9: gán biến ch là Z

Ở 4 dòng tiếp theo

- Dòng 10: con trỏ ip1 trỏ tới giá trị địa chỉ biến x
- Dòng 11: con trỏ ip2 trỏ tới giá trị địa chỉ biến z
- Dòng 12: con trỏ fp trỏ tới giá trị địa chỉ biến y
- Dòng 13: con trỏ chp trỏ tới giá trị địa chỉ biến ch

Ở 3 dòng tiếp theo

- Dòng 14: gán giá trị của con trỏ ip1 đang trỏ đến cho con trỏ ip2 tức là x nên con trỏ ip1 và ip2
đều trỏ đến x
- Dòng 15: trỏ con trỏ ip1 đến giá trị địa chỉ biến z
- Dòng 16: gán giá trị của biến được trỏ tới bởi con trỏ ip2 (là x) vào vùng nhớ mà con trỏ ip1 đang
trỏ đến => giá trị của biến z = x =100

Ở 3 dòng tiếp theo

- Dòng 17: gán giá trị của biến mà con trỏ ip1 đang trỏ đến thành 200 (z=200)
- Dòng 18: gán giá trị của biến mà con trỏ ip1 đang trỏ đền thành 400 vì *ip2 có giá trị là 100 mà
*ip1 = *ip2 + 300 nên biến z = 400
- Dòng 19: gán giá trị của biến mà con trỏ fp đang trỏ đến thành 1.2 (y=1.2)

Ở 3 dòng tiếp theo

- Dòng 20: xuất ra x tức là xuất ra 100 sau khi đã hoàn thành dòng 16
- Dòng 21: xuất ra y tức là xuất ra 1.2 sau khi đã hoàn thành dòng 19
- Dòng 22: xuất ra z tức là xuất ra 400 sau khi hoàn thành dòng 18

Ở 3 dòng tiếp theo

- Dòng 23: xuất ra ip1 tức là xuất ra địa chỉ của biến mà con trỏ ip1 đang trỏ đến tức là địa chỉ của
biến z
- Dòng 24: xuất ra *ip1 tức là xuất ra giá trị của biến mà con trỏ ip1 đang trỏ đến tức là giá trị của
z = 400
- Dòng 25: xuất ra &ip1 tức là xuất ra địa chỉ của con trỏ ip1

Ở 3 dòng tiếp theo

- Dòng 26: xuất ra ip2 tức là xuất ra địa chỉ của biến mà con trỏ ip2 đang trỏ đến tức là địa chỉ của
biến x
- Dòng 27: xuất ra *ip2 tức là xuất ra giá trị của biến mà con trỏ ip2 đang trỏ đến tức là giá trị của
x=100
- Dòng 28: xuất ra &ip2 tức là xuất ra địa chỉ của con trỏ ip2

Ở 3 dòng tiếp theo

- Dòng 29: xuất ra fp tức là xuất ra địa chỉ của biến mà con trỏ fp đang trỏ đến tức là địa chỉ của
biến y
- Dòng 30: xuất ra *fp tức là xuất ra giá trị của biến mà con trỏ fp đang trỏ đến tức là giá trị của
biến y =1.2
- Dòng 31: xuất ra &fp tức là xuất ra địa chỉ của con trỏ fp

Ở 3 dòng tiếp theo

- Dòng 32: xuất ra chp tức là xuất ra địa chỉ của biến mà con trỏ chp đang trỏ đến tức là địa chỉ
của biến ch
- Dòng 33: xuất ra *chp tức là xuất ra giá trị của biến mà con trỏ chp đang trỏ đến tức là giá trị của
biến ch = ‘X’
- Dòng 34: xuất ra &chp tức là xuất ra địa chị của con trỏ chp
3.4
Dòng 1: in ra giá trị của con trỏ p đang trỏ tới: xuất 3

- Vì cout là in ra *p mà p đang được trỏ tới a (int *p = &a;) mà a được gán trị 3 (int a = 3;)

Dòng 2: in ra số lượng phần tử đã cấp phát cho con trỏ p: xuất 5

- Vì cout là in ra *p mà ở dòng trên p đã được cấp phát bộ nhớ với số lượng phần tử là 5 (p = new
int(5);)
 Đoạn code không có lỗi
3.9
Đáp án: D.ce

Vì con trỏ s kiểu dữ liệu char được gán chuỗi str[] = “peace” nên lúc này con trỏ s đang trỏ tới địa chỉ của
phần tử đầu tiên của chuỗi str, sau đó ở printf thì s++ tức là con trỏ s vẫn đang trỏ tới str[0] và sau đó +3
thì lúc này con trỏ trỏ tới str[3] và xuất ra thì xuất từ phần tử thứ 3 trở đi của chuỗi str[] là ce
3.10
Đáp án: B.2,15,6,8,10

Vì ở dòng 1 chuỗi a[] được khai báo với 5 phần từ là 2 4 6 8 10 sau đó đến hàm change, trong hàm
change biến i được khai báo với kiểu dữ liệu int và đến hàm for trong đó ta thấy *(b+1) tức là a[1] đang
được gán giá trị của *(b+i)+5 tức là *(a+i)+5 lần lượt đến phần tử cuối cùng của mảng thì khi này a[1] sẽ
được gán giá trị 15 với a[4]+5 = 10 + 5 còn lại giá trị của tất cả các phần tử khác trong mảng đều không
thay đổi
3.11
Đáp án: B.20,4,4

- sizeof(arr) là tính kích thước của mảng arr mà mảng arr có 5 phần tử và mỗi phần tử là 1 số
nguyên có size là 4 byte do đó giá trị trả về là 20
- sizeof(*arr) là tính kích thước của một phần tử trong mảng arr mà các phần tử trong mảng arr
đều là số nguyên nên kích thước của một phần tử có kích thước là 4 byte nên giá trị trả về là 4
- sizeof(arr[0]) là tính kích thước của phần tử đầu tiên của mảng arr mà arr[0] là số nguyên nên
kích thước là 4 byte nên kết quả trả về cũng là 4
3.13
Đáp án: a)*
3.14
Đáp án: a) x is a pointer to a string, y is a string
3.15
Đáp án: d) point to a tye

Vì con trỏ có thể ở ba trạng thái trên


3.16
Đáp án: c)int i;double *dp = &i

Vì biến i được khai báo với kiểu dữ liệu int mà con trỏ dp trỏ đến địa chỉ của biến i lại được khai báo với
con trỏ với kiểu dữ liệu double
3.17
Đáp án: b) p now points to b

Vì biến a và b được khai báo với kiểu int và gán lần lượt là 100 và 200, sau đó con trỏ p và q được khai
báo với kiểu int và trỏ tới địa chỉ lần lượt của biến a và b, cuối cùng p = q tức là con trỏ p lúc này sẽ trỏ
tới địa chỉ của biến b như của con trỏ q
3.18
Đáp án: d) it will return some random number

Vì:

- Dòng 1: Biến a, b và c lần lượt được khai báo với kiểu dữ liệu int và được gán gia trị 5, 10, 15 lần
lượt
- Dòng 2: Khai báo mảng arr chứa các con trỏ với kiểu int và cho chúng trỏ tới địa chỉ của ba biến
a,b và c
- Dòng 3: In ra giá trị địa chỉ của biến b vì (cout << arr[1]) phần tử thứ hai của arr chứa địa chỉ của
biến b
3.19
Đáp án: a)ABCDEFGHIJ

Vì :

- Dòng 1: Khai báo mảng kí tự a gồm 20 phần tử


- Dòng 2: Khai báo biến i với kiểu int
- Dòng 3: Vòng for cho i chạy tới 9
- Dòng 4: lần lượt gán các phần tử của mảng a với kí tự A trở đi tương ứng với i tăng dần
- Dòng 5: sau khi kết thúc gán kí tự NULL vào phần tử cuối cung của mảng a
- Dòng 6: cout << a lúc này chuỗi kí tự a là ABCDEFGHIJ
3.20
Đáp án: a)fg

Vì:

- Dòng 1: khai báo con trỏ ptr kiểu char


- Dòng 2: khai báo chuỗi kí tự Str[] = “abcdefg”
- Dòng 3: con trỏ được gán bang địa chỉ của phần tử đầu tiên của mảng Str
- Dòng 4: con trỏ được tang lên 5 tương ứng di chuyển đến địa chỉ phần tử thứ 5 của mảng Str
tương ứng là ‘f’
- Dòng 5: cout ra nội dung con trỏ ptr tương ứng với địa chỉ mà con trỏ đang trỏ trở đi đến khi
gặp ‘\0’ nên kết quả in ra là “fg”
3.21
Đáp án: D.All of them
3.22
Đáp án:D.All of them
3.23
Đáp án: B. const

Vì const là để khai báo biến có giá trị không đổi còn lại các đáp án khác đều có thể thay đổi
3.25
Đáp án: B.Indirection

Vì ví dụ khai báo biến a kiểu int với giá trị gán là 7: int a = 7; sau đó khai báo con trỏ ptr kiểu int trỏ đến
giá trị địa chỉ của a : int *ptr = &a; và cout ra *ptr thì sẽ ra được giá trị của biến a
3.24
Đáp án: C. The new operator

Vì toán tử new được sử dụng để phân bổ bộ nhớ động ví dụ như int *ptr = new int; trong đó delete là
dung để giải phóng bộ nhở đã cấp cón empty không là toán tử
3.26
Đáp án: A.sizeof

Vì các đáp án còn lại không đúng cú pháp


3.27
Đáp án: A. Pointer contains an address of variable
3.28
Đáp án: C. 3

Vì pointer có thể khai báo với giá trị 0, NULL hoặc là địa chỉ của một biến nào đó
3.29
Đáp án: C. Address operator
3.22
Đáp án: b. 10, 20, 30, 40, 50,

Vì:

- Dòng 1: khai báo mảng num với 5 phần tử


- Dòng 2: khai báo con trỏ p kiểu int
- Dòng 3: gán mảng num cho con trỏ p tức là p được gán giá trị địa chỉ của phần tử đầu của mảng
num
- Dòng 4: gán giá trị của biến mà con trỏ p đang trỏ đến là 10 cho phần tử đầu tiên của mảng num
tức là num[0] = 10
- Dòng 5: p++ tức là dịch chuyển con trỏ sang phải 1 vị trí tức là đến phần tử thứ hai của mảng
- Dòng 6 : gán giá trị của biến mà con trỏ p đang trỏ đến là 20 cho phần tử thứ hai của mảng num
tức là num[1] = 20
- Dòng 5: gán giá trị địa chỉ của phần tử thứ ba của mảng num cho con trỏ p
- Dòng 6: gán giá trị của biến mà con trỏ p đang trỏ đến là 30 cho phần tử thứ ba của mảng num
tức là num[2] = 30
- Dòng 7: gán mảng num+3 cho con trỏ p tức là p được gán giá trị địa chỉ của phần tử 4 của mảng
num
- Dòng 8: gán giá trị của biến mà con trỏ p đang trỏ đến là 40 cho phần tử thứ ba của mảng num
tức là num[3] = 40
- Dòng 9: gán mảng num cho con trỏ p tức là p được gán giá trị địa chỉ của phần tử đầu của mảng
num
- Dòng 10: dịch chuyển con trỏ sang phải 4 vị trí tức là đến phần tử thứ 5 của mảng và gán giá trị
là 50 tức là num[4] = 50
- Hai dòng còn lại cout ra các giá trị trong mảng num
3.31
Đáp án: d. Compile error

Vì: biến i được khai báo với kiểu dữ liệu int và const nên không thể thay đổi giá trị của i, sau đó con trỏ
ptr cũng được khai báo kiểu int và const trỏ vào I nên khi (*ptr)++ tức là thay đổi giá trị mà của biến mà
con trỏ ptr đang trỏ đến mà biến i được khai báo kiểu const int nên không thể thay đổi dẫn đến gây lối
thực thi
3.38
Đáp án: x = 21, y = 500, z =500

Vì:

- Biến x được khai báo với kiểu int và gán giá trị 20 và con trỏ y và z kiểu int được trỏ tới x
- *y++ chỉ tăng con trỏ của y lên 1 đơn vị và *z++ cũng chỉ tang con trỏ của z lên 1 đơn vị
- X++ tăng giá trị của x lên 1 đơn vị tức là x =21
- Các giá trị xuất ra là x = 21 và y = 500 tức là địa chỉ của x và z =500 tức là địa chỉ của x
3.33
Đáp án: c. 14

Vì dòng lệnh cout là in ra *arr +10 mà *arr là trỏ tới phần tử đầu tiên của mảng arr (int arr[] = {4,5,6,7};)
là arr[0] = 4 thêm nữa *arr + 10 nên giá trị của (arr[0] = 4 )+10 bằng 14
3.35
Output: 2

Vì lệnh printf là xuất ra *(ptr+1) mà ptr thì được khai báo là con trỏ kiểu int (int *ptr) và sau đó gán địa
chỉ phần tử đầu tiên của mảng a cho con trỏ ptr và xuất ra giá trị của phần tử thứ hai của mảng a bằng
toán tử trỏ và dereference. Vì con trỏ ptr được gán địa chỉ của phần tử đầu tiên của mảng a nên *(ptr+1)
tức là a[1] tức là phần tử thứ hai của mảng a
3.36
Output: 15

Vì lệnh printf in ra a mà a được khai báo với kiểu dữ liệu int và gán giá trị là 5 (int a =5;) và sau đó con trỏ
ptr được khai báo với kiểu dữ liệu int (int *ptr;) và sau đó con trỏ ptr trỏ tới a (ptr = &a;) sau đó giá trị
của ptr đang trỏ đến là của a là 5 được nhân 3 lên (*ptr = *ptr *3;) nên giá trị của a cũng được nhân 3
lên thành 15 nên giá trị cuối cùng của a được xuất ra là 15
3.41
Đáp án: a) compilation error

Vì con trỏ ptr được khai báo nhưng chưa được trỏ đến bất kì địa chỉ nào nhưng lại được gán giá trị của
biến mà ptr trỏ đến là 5 dẫn đến lỗi trong quá trình biên dịch
3.43
Đáp án: d) num = 10 address of num = 2293436 num = 11 address of num = 2293436

Vì ở printf đầu xuất ra num đầu và địa chỉ của num sau đó num++ thì giá trị của num = 11
nhưng địa chỉ không thay đổi nên printf sau xuất ra num sau và địa chỉ của num

You might also like