Đổi giá trị 2 số cho nhau

Em code bài đổi giá trị 2 số cho nhau, ở đây là a = 2 và b = 3 cho mọi người dễ hình dung.
Thế nhưng khi run thì giá trị a, b vẫn không đổi, nghĩa là a vẫn = 2, b vẫn = 3.
Mọi người giúp em với

#include <stdio.h>
#include <stdlib.h>

int swap(int a, int b)
{
    int t = a;
    a = b;
    b = t;
    return a, b;
}

int main(int argc, char *argv[])
{
    int a = 2, b = 3;
    printf("a = %d\tb = %d", a, b);
    swap(a, b);
    printf("\nAfter being swapped:\n");
    printf("a = %d\tb = %d", a, b);
    return 0;
}
1 Like

Em sửa lại hàm swap như thế này

int swap(int *a, int *b)
{
    int t = *a;
    *a = *b;
    *b = t;
}

Lý do là vì C truyền tham trị nên ta cần sử dụng con trỏ. Anh có làm một bài chứng minh ở đây

2 Likes

Dạ cám ơn anh, truyền tham trị em cũng hiểu, nhưng con trỏ em chưa học tới.
Để bữa nào rảnh em học về con trỏ.
Mà sao series C của anh không có con trỏ nhỉ (em hỏi vậy thôi chứ em có thấy video nói về nó rồi)

1 Like

Em xem đỡ bên C++, nó giống như C thôi. Anh chưa có thời gian làm thôi. Anh sẽ làm đầy đủ.

1 Like

Sao đổi rồi, build nó báo lỗi tùm lum vậy

1 Like

báo như nào bạn đưa lỗi lên?

Con trỏ chưa học tới thì truyền tham chiếu cũng được mà

int swap(int& a, int& b)

The instruction at 0x00… referenced memory at 0x0… . The memory could not be read, xuất hiện cùng nó là bảng báo file .exe has stopped working

Em đã thử, nhưng nó báo expected ‘;’ , ‘,’ or ‘)’ before ‘&’ token

Em đã copy luôn code của anh, kể cả khi chuyển qua int, có return hay không, nó vẫn báo lỗi
expected ‘;’ , ‘,’ or ‘)’ before ‘&’ token

trong C không có & (reference) trong hàm nên không chạy được.

  • nếu chưa học con trỏ thì hơi khó. Có thể định nghĩa 1 đoạn macro để làm
#define swap(a,b) do{ int __t=a; a=b;b=__t;}while(0)
3 Likes

Bạn sửa lại như này nhé, mình chạy trên ubuntu 14.10 thấy ok:

#include <stdio.h>
#include <stdlib.h>

int swap(int *a, int *b)
{
    int t = *a;
    *a = *b;
    *b = t;
}

int main(int argc, char *argv[])
{
    int a = 2, b = 3;
    printf("a = %d\tb = %d", a, b);
    swap(&a, &b);// minh nghi doan nay ban chua goi nhu the nay
    printf("\nAfter being swapped:\n");
    printf("a = %d\tb = %d \n", a, b);
    return 0;
}
2 Likes

Cám ơn bạn nhiều, đã thành công

1 Like

:smile:

a = (a+b) - (b=a);
3 Likes

Với câu này thực ra chẳng cần con trỏ

a = a+b; 5
b = a -b; 2
a = a -b; 3
1 Like

Cách này chơi được nhưng hơi khó hiểu và hình như bị báo warning :D.

đọc cái này mà khó hiểu chứng tỏ là thời gian dành cho lập trình chưa đủ; và ko hiểu bảng thứ tự toán tử và độ ưu tiên.

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