(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);
- }
|