指针本质上就是一个值为地址的变量。
int * p1;
如上,p1的值则是一个int类型的变量的地址。
int num1 = 10;
p1 = &num1;
&为地址运算符,将变量num1的地址赋值给int类型指针p1。
int num2 = *p1;
*为间接运算符,作用是取出指针指向地址存储的变量值。p1指针存储的为变量num1的地址,所以*p1就是num1的值。以上代码等同于num2 = num1。
使用指针实现数据交换。
#include <stdio.h>
void swap(int *, int *);
int main(void)
{
int num1 = 10, num2 = 20;
printf("num1值为%d,地址为%p\n", num1, &num1);
printf("num2值为%d,地址为%p\n", num2, &num2);
// 传递num1、num2的地址
swap(&num1, &num2);
return 0;
}
void swap(int * s1, int * s2)
{
// s1为变量num1的地址,操作存储在s1地址上的值即操作num1本身
int temp = *s1;
*s1 = *s2;
*s2 = temp;
printf("s1值为%d,地址为%p\n", *s1, s1);
printf("s2值为%d,地址为%p\n", *s2, s2);
}
输出如下:
num1值为10,地址为000000777f9ff65c
num2值为20,地址为000000777f9ff658
s1值为20,地址为000000777f9ff65c
s2值为10,地址为000000777f9ff658