What is output? void myfunc(char** param) { ++*param; } void main() { char* string = (char*)malloc(64); strcpy(string, "hello_World"); myfunc(&string); myfunc(&string); printf("%s\n", string); getch(); }
Trả lời:
Đáp án đúng: C
Đề bài cho một đoạn code C và hỏi về kết quả in ra màn hình. Đoạn code này sử dụng con trỏ và hàm để thay đổi giá trị của chuỗi.
Phân tích:
1. `char* string = (char*)malloc(64);`: Cấp phát bộ nhớ động cho chuỗi `string` với kích thước 64 bytes.
2. `strcpy(string, "hello_World");`: Sao chép chuỗi "hello_World" vào vùng nhớ mà `string` trỏ tới.
3. `myfunc(&string);`: Gọi hàm `myfunc` và truyền địa chỉ của con trỏ `string` vào. Hàm `myfunc` nhận một con trỏ tới con trỏ (char** param). Trong hàm, `++*param` tăng giá trị của con trỏ `string` lên một đơn vị (tức là trỏ tới ký tự tiếp theo trong chuỗi).
4. `myfunc(&string);`: Gọi hàm `myfunc` lần thứ hai. Con trỏ `string` tiếp tục trỏ tới ký tự tiếp theo.
5. `printf("%s\n", string);`: In chuỗi bắt đầu từ vị trí mà `string` đang trỏ tới.
Như vậy, sau hai lần gọi hàm `myfunc`, con trỏ `string` sẽ trỏ tới ký tự thứ ba của chuỗi (ký tự 'l'). Do đó, khi in ra, chuỗi sẽ bắt đầu từ ký tự 'l' và có giá trị là "llo_World".





