指针
有一种变量是用来存放地址的--指针变量(专门存地址的)
//两个值的相互交换-->
int a,b,c;
scanf("%d%d",&a,&b );
t=a,a=b,b=t;
这样的看似循环的值的相互赋予实际上并没有让每个值 不断变换,反而实现的a,b值的相互交换。代码的运行过程大致为,把a的值赋给t,此时作为一个中间变量是作为一个媒介工具,它拥有的是a以前的值,然后b再把它的值赋给a,这时a的值就变成了b的值,然后t再利用之前a赋给它的值交给b,从而实现a,b值的相互交换。//大多没理解的会认为a赋给t后,b再赋给a,此时会再赋值给t,实际上代码的执行是有顺序的所以就不会出现逻辑的错误。
//void的用法:用void可以省略return 0,或者省略0.简而言之void可以省略返回值
#include<stdio.h>
void swap(int x, int y)
{
int t = x;x = y; y = t;
}
void main()
{
int num1 = 100;
int num2 = 200;
printf("before swapping, %d%d",num1, num2);
swap(num1, num2);
printf("after swapping, % d%d,num1, num2};
}
输出以后保持不变主要是因为调用函数时使用按值调用,实际上是x,y相互交换,而不是num1,num2。按值调用时,实际参数只是复制到形式参数中。
所以我们通过创建指针的方式解决上述问题。
第一步:创建指针变量,写法为:基本类形--+*
第二步:给指针变量赋值,&+变量。
//总而言之就是指针变量就是存放地址的一种特殊变量。这种特殊就是在变量前加个*,比如int * t
创建完后我们给这个变量赋值,所以赋值就是赋地址,要地址就是加个&
于是,上面的代码就变成了;
void swap(int*x, int*y)
{
int t = *x;
*x = *y;
*y = *t;
}
void change()
{
int a = 100;
int b = 200;
swap(&a ,&b);
}
一个 函数只能访问自己的栈帧。但是,通过指针,一个函数可以间接的读写另一个栈帧中的变量值。