C语言指针变量作为函数参数
来源:互联网 发布:淘宝图片尺寸大小 编辑:程序博客网 时间:2024/05/17 04:13
参考:http://c.biancheng.net/cpp/html/74.html
在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。
像数组、字符串、动态分配的内存等都是一系列数据的集合,没有办法通过一个参数全部传入函数内部,只能传递它们的指针,在函数内部通过指针来影响这些数据集合。
有的时候,对于整数、小数、字符等基本类型数据的操作也必须要借助指针,一个典型的例子就是交换两个变量的值。
有些初学者可能会使用下面的方法来交换两个变量的值:
#include <stdio.h>void swap(int a, int b){ int temp; //临时变量 temp = a; a = b; b = temp;}int main(){ int a = 66, b = 99; swap(a, b); printf("a = %d, b = %d\n", a, b); return 0;}
运行结果:
a = 66, b = 99
从结果可以看出,a、b 的值并没有发生改变,交换失败。这是因为 swap() 函数内部的 a、b 和 main() 函数内部的 a、b 是不同的变量,占用不同的内存,它们除了名字一样,没有其他任何关系,swap() 交换的是它内部 a、b 的值,不会影响它外部(main() 内部) a、b 的值。
改用指针变量作参数后就很容易解决上面的问题:
运行结果:
a = 99, b = 66
调用 swap() 函数时,将变量 a、b 的地址分别赋值给 p1、p2,这样 *p1、*p2 代表的就是变量 a、b 本身,交换 *p1、*p2 的值也就是交换 a、b 的值。函数运行结束后虽然会将 p1、p2 销毁,但它对外部 a、b 造成的影响是“持久化”的,不会随着函数的结束而“恢复原样”。
需要注意的是临时变量 temp,它的作用特别重要,因为执行*p1 = *p2;
语句后 a 的值会被 b 的值覆盖,如果不先将 a 的值保存起来以后就找不到了。
用数组和变量作函数参数例子
u8 canreceive[8];uint32_t ID;//函数u8 Can_Receive_Msg(u8 *buf,uint32_t *id){ u32 i;CanRxMsg RxMessage; if( CAN_MessagePending(CAN1,CAN_FIFO0)==0)return 0; CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);if(RxMessage.StdId==0x390){for(i=0;i<8;i++) buf[i]=RxMessage.Data[i]; *id=RxMessage.StdId;}if(RxMessage.StdId==0x190){for(i=0;i<8;i++) buf[i]=RxMessage.Data[i]; *id=RxMessage.StdId;}return RxMessage.DLC;}key=Can_Receive_Msg(canreceive,&ID);//调用
阅读全文
0 0
- C语言指针变量作为函数参数
- C语言指针变量作为函数参数
- C语言指针变量作为函数参数
- C语言指针变量作为函数参数
- C语言指针变量作为函数参数
- C语言指针变量作为函数参数
- C语言中指针变量作为函数参数和一般变量作为函数参数的区别
- 11.19C语言----指针变量作为函数参数
- c语言中指针变量作为函数的参数
- 96 C语言指针变量作为函数参数
- c语言 指针作为函数参数
- c语言:指针变量作为函数参数,求两个数的最大值
- 指针变量作为函数参数
- 指针变量作为函数参数
- 指针变量作为函数参数
- 指针变量作为函数参数
- 指针变量作为函数参数
- 指针变量作为函数参数
- 容器
- javascript中的this词法
- spring boot 下mybatis的mapper Could not autowire问题
- Mysql常用命令行集
- vue2.0 组件通信
- C语言指针变量作为函数参数
- 搭建开发环境
- PercentLayout中使用layout_aspectRatio属性报错
- Python多线程(2)——线程同步机制
- HTML基础学习-1
- ButterKnife8.0+ 与 Dagger2.+的使用踩过的坑
- ZOJ 3475 The Great Wall I
- spring data jpa 表不关联多表查询
- 测试前准备