- /* f.c 用函数指针代替C++的引用参数 */
- #include<stdio.h>
- void fa(int a) /* 在函数中改变a,将不会带回主调函数(主调函数中的a仍是原值) */
- {
- a=5;
- printf("在函数fa中:a=%d/n",a);
- }
- void fb(int *a) /* a为指针类型,在函数中改变*a,改变后的值将带回主调函数 */
- {
- *a=5;
- printf("在函数fb中:*a=%d/n",*a);
- }
- void main()
- {
- int n=1;
- printf("在主程中,调用函数fa之前:n=%d/n",n);
- fa(n);
- printf("在主程中,调用函数fa之后,调用函数fb之前:n=%d/n",n);
- fb(&n); /* 实参为n的地址 */
- printf("在主程中,调用函数fb之后:n=%d/n",n);
- }
第9行,void fb(int *a) 这种形式容易形成误解,其实若写作
void fb(int* a)
就好理解了。这里a为指针类型,在调用时传递一个地址就可以了。
第21行,&n就是一个地址,函数fb()修改的是实际的变量n的值。
【相关知识】指针类型与取地址:
&是取地址运算符,&a为变量a的地址。
*是指针运算符,*p为指针变量p所指向的存储单元中的内容。而指针变量p中一般只存放地址。