Professional Documents
Culture Documents
W02 30
W02 30
1
Hàng 1: in ra địa chỉ của biến a
- Vì đang được con trỏ b trỏ tới (vì là cout << *b;)
- Vì cout là cout ra &b mà &b là & con trỏ b nên sẽ xuất ra địa chỉ biến a
- Vì a không là con trỏ chỉ là biến được gán trị 3 (int a =3;)
- 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
- 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
- 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
- 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)
- 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
- 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
- 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
- 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
- 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;)
- 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
Vì
- 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ì 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ì :
Vì:
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ì 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ì:
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