#include <stdio.h>

void swap(int *px, int *py){
int temp = *px;
*px = *py;
*py = temp;
}

int main(void){
int num1, num2;

puts("请输入两个整数:");
printf("整数A:");
scanf("%d", &num1);

printf("整数B:");
scanf("%d", &num2);

swap(&num1, &num2);

puts("互换了两数的值。\n");
printf("整数A的值是%d。\n", num1);
printf("整数B的值是%d。\n", num2);

return 0;
}

运行结果:
C语言 使用指针对两个变量的数值进行互换_指针变量

swap函数中,形参px 和 py 被声明为“指向int型变量的指针变量”。函数被调用时,将&num1 和 &num2复制到 px 和 py中,指针 px 便指向了 num1 ,指针py 便指向了 num2。由于在指针前面加上指针运算符 *,就可以显示该指针指向的对象,因此 *px是num1的别名,*py是num2的别名。

scanf函数与printf函数不同,在使用scanf函数进行读取时,变量名前必须加上一个特殊符号&。
scanf函数的使命是为主调函数中定义的对象保存值。倘若它接收到的纯粹是变量的“值”,是无法进行保存的。因此,scanf函数接收的是指针(具有地址的“值”),由该指针所指对象保存从标准输入读到的值。


swap函数的功能是将两个int型整数进行互换,而传入的却是指向double型变量的指针。
指针px指向了 double 型变量的 num1,但是 int 型的 *px 却不能等同于 double 型变量的 num1。

#include <stdio.h>

void swap(int *px, int *py){
int temp = *px;
*px = *py;
*py = temp;
}

int main(void){
double num1, num2;

puts("请输入两个实数。");
printf("实数A:");
scanf("%lf", &num1);

printf("实数B:");
scanf("%lf", &num2);

swap(&num1, &num2);

puts("互换了两数的值。\n");
printf("整数A的值是%f。\n", num1);
printf("整数B的值是%f。\n", num2);

return 0;
}

运行结果:
C语言 使用指针对两个变量的数值进行互换_#include_02
因此,编译程序时,会显示警告信息,运行结果中显示的也不是正常的值。
C语言 使用指针对两个变量的数值进行互换_指针变量_03