70后说80后太狂,80后说90后太傻,90后说自己是傻B;
太狂的大多都成功了, 太傻的大多还是傻B;
言归正传 这里依然用几个例子 来解释指针的作用
#include <stdio.h>
void exchange(int a, int b);
int main(void)
{
int x = 10;
int y = 5;
printf("old x = %d and old y = %d\n", x, y);
exchange(x, y); // 只是将 x 和 y 的值传递给 a 和 b;并没有改变 x 和 y本身的值(最后打印的值可以看出来)
printf("old x = %d and old y = %d\n", x, y);
return 0;
}
void exchange(int a, int b)
{
int temp;
printf("old a = %d and old b = %d\n", a, b);
temp = a;
a = b;
b = temp;
printf("new a = %d and new b = %d\n", a, b);
}
输出:
old x = 10 and old y = 5
old a = 10 and old b = 5
new a = 5 and new b = 10
old x = 10 and old y = 5
接下来用到 指针 来继续完成上面函数没有实现的事情(这里指针就这个D用)
#include <stdio.h>
void exchange(int *a, int *b);
int main(void)
{
int x = 10;
int y = 5;
printf("old x = %d and old y = %d\n", x, y);
exchange(&x, &y); //与上面的一个函数的区别在于这里传递的是 x 和 y 的地址 被调函数是对地址中所存储的值进行操作 地址不变 变的的是存储的值
printf("old x = %d and old y = %d\n", x, y);
return 0;
}
void exchange(int *a, int *b) // * 这个符号到底是啥意思 书中明确写的这个符号叫 间接运算符; *a 表示指向a地址所存储的值
{
int temp;
printf("old *a = %d and old *b = %d\n", *a, *b);
temp = *a;
*a = *b;
*b = temp;
printf("new *a = %d and new *b = %d\n", *a, *b);
}
输出:
old x = 10 and old y = 5
old *a = 10 and old *b = 5
new *a = 5 and new *b = 10
old x = 5 and old y = 10