(2)、单片机指针作为函数形式参数来改变实际参数变量值的单片机C语言程序
#include<reg51.h>
#include <stdio.h>
int a=1;
int b=2;
int *pa=&a;//表示把实际参数变量a所在内存地址(由内存器分配)存放的数据1赋给指针变量pa
int *pb=&b;//表示把实际参数变量b所在内存地址(由内存器分配)存放的数据2赋给指针变量pb
void Swap0(int x,int y)//含有普通形式参数变量的函数
{
int t;
t=x;//实际参数变量a把数值1赋给形式参数变量x,形式参数变量x又把数值1赋给变量t。
x=y;//实际参数变量把数值2赋给形式参数变量y,形式参数变量y又把数值2赋给变量x。
y=t;//变量t把数值1赋给变量y
// printf("S2:x=%d,y=%d\n",x,y);
}
void Swap1(int *px,int *py)//含有形式参数指针变量的函数
{
int t;
t=*px;//实际参数变量a先把所在内存地址(由内存器分配)赋给形式参数变量pa,形式参数变量pa再把携带实际参数变量a的内存地址(由内存器分配)赋给另外个形式参数指针变量px(相当于实际参数变量a),形式参数指针变量px(相当于实际参数变量a)最终从形式参数变量pa携带实际参数变量a的内存地址上获取数值1,赋给变量t。
*px=*py;//实际参数变量b先把所在内存地址(由内存器分配)赋给形式参数变量pb,形式参数变量pb再把携带实际参数变量b的内存地址(由内存器分配)赋给另外个形式参数指针变量py(相当于实际参数变量b),形式参数指针变量py(相当于实际参数变量b)最终从形式参数变量pb携带实际参数变量b的内存地址上获取数值2,赋给形式参数指针变量px(相当于实际参数变量a)。
*py=t;//变量t把数值1赋给指针变量py(相当于实际参数变量b)
// printf("S2:px=%d,py=%d\n",px,py);
}
void Swap2(int *px,int *py)//含有指针形式参数的函数
{
int *pt;//声明指针变量pt
pt=px;//实际参数变量a先把所在内存地址(由内存器分配)赋给形式参数变量pa,形式参数变量pa再把携带实际参数变量a的内存地址(由内存器分配)赋给另外个形式参数指针变量px(相当于实际参数变量a),形式参数指针变量px(相当于实际参数变量a)最终从形式参数变量pa携带实际参数变量a的内存地址赋给指针变量pt。
px=py;//实际参数变量b先把所在内存地址(由内存器分配)赋给形式参数变量pb,形式参数变量pb再把携带实际参数变量b的内存地址(由内存器分配)赋给另外个形式参数指针变量py(相当于实际参数变量b),形式参数指针变量py(相当于实际参数变量b)最终从形式参数变量pb携带实际参数变量b的内存地址赋给形式参数指针变量px(相当于实际参数变量a)。
py=pt;//指针变量pt把所在内存地址(由内存器分配)赋给指针变量py(相当于实际参数变量b)
// printf("S2:px=%d,py=%d\n",px,py);
}
void main(void)
{
Swap0(a,b);
printf("S0:a=%d,b=%d\n",a,b);//输出:a=1,b=2。
Swap1(pa,pb);
printf("S1:a=%d,b=%d\n",a,b);//输出:a=2,b=1。
Swap2(pa,pb);
printf("S2:a=%d,b=%d\n",a,b);//输出:a=2,b=1。
while(1);
}
|