我试图更好地理解 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;
}
我将以下内容混为一谈,看看它是否能帮助我更好地理解正在发生的事情,主要是关于使用 & 与 *(取消引用)的需要。基本上,声明指向 int 类型的指针 (int* a) 与使用星号“取消引用” (*a = *b) 的语法对我来说相当混乱,我希望有人能启发我。这是上面的另一个版本,我认为可以帮助澄清,但实际上并没有:
#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;
}
简而言之,我的问题是,这两个程序在做什么之间是否存在功能差异?*a = *b
取消引用 ( ) 与使用&
运算符 ( )之间有什么区别*a = &x
”。