Tôi đang cố gắng hiểu rõ hơn về con trỏ và tham chiếu trong C và khóa học của tôi đã cung cấp chương trình sau làm ví dụ.Tìm hiểu con trỏ với chương trình hoán đổi trong C
#include <stdio.h>
void swap(int* a, int* b);
int main(void)
{
int x = 1;
int y = 2;
swap(&x, &y);
printf("x is %i\n", x);
printf("y is %i\n", y);
}
void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
Tôi lê lại với nhau sau đây để xem nếu nó sẽ giúp tôi hiểu rõ hơn về những gì đang xảy ra, chủ yếu liên quan đến nhu cầu sử dụng & so với * (dereference). Về cơ bản, cú pháp khai báo một con trỏ tới kiểu int (int * a) so với việc sử dụng dấu hoa thị để "dereference" (* a = * b) khá khó hiểu với tôi, và tôi hy vọng ai đó có thể khai sáng cho tôi. Dưới đây là một phiên bản khác của các bên trên mà tôi nghĩ sẽ giúp làm rõ, nhưng thực sự không:
#include <stdio.h>
void swap(int* a, int* b);
int main(void)
{
int x = 1;
int y = 2;
int *a = &x;
int *b = &y;
swap(a, b);
printf("x is %i\n", x);
printf("y is %i\n", y);
}
void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
Nói tóm lại, câu hỏi của tôi là, liệu có một sự khác biệt về chức năng giữa những gì hai chương trình này đang làm? sự khác biệt giữa một dereference (*a = *b
) so với sử dụng &
điều hành (*a = &x
)"
Ah, nhấp! Cảm ơn bạn! –
Nếu nó giúp hiểu, hãy viết 'int * x' thay vì' int * x' –