Hoán đổi chuỗi - ngôn ngữ C

#include<stdio.h>

void swap(char *str1, char *str2) {
char *temp = str1;
str1 = str2;
str2 = temp;
}

int main() {
char *str1 = "Hello";char *str2 = "World";
printf("str1 is %s, str2 is %s\n", str1,str2);
swap(str1, str2);
printf("str1 is %s, str2 is %s", str1,str2);
}

Em đã debug thấy hai chuỗi đã hoán đổi nhưng khi in ra màn hình thì hai chuỗi vẫn như cũ, có ai giải thích giùm em được không ạ? Em cảm ơn nhiều.

Bạn đang áp dụng kỹ thuật “pass argument by value” trong C++.
Bạn thử sửa dòng này:

void swap(char *str1, char *str2) {

thành như này:

void swap(char*& str1, char*& str2) {

rồi xem lại thử đã đúng kết quả chưa.

Sau đó bạn tìm hiểu với từ khoá “pass argument by reference c++” nha.

4 Likes

Trong C không có khái niệm tham chiếu cho tham số của hàm. Nhưng có con trỏ cấp 2 (con trỏ đa cấp).
Đây là cách dùng con trỏ cấp 2.

#include<stdio.h>

void swap(char **str1, char **str2) {
char *temp = *str1;
*str1 = *str2;
*str2 = temp;
}

int main() {
char *str1 = "Hello";char *str2 = "World";
printf("str1 is %s, str2 is %s\n", str1,str2);
swap(&str1, &str2);
printf("str1 is %s, str2 is %s", str1,str2);
}

Kết quả:

str1 is Hello, str2 is World
str1 is World, str2 is Hello
4 Likes

mình cảm ơn bạn nhiều

1 Like

Mình hiểu rồi mình cảm ơn ạ

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?