因为第一个参数是地址传递,fun(&b,a)中传入a字符。*c=*c+1将c的值变为b字符。主函数的值改变。
第二个参数是值传递,所以在函数中d的值为B字符。但是并不影响主函数的值,所以主函数输出a的值是A。b的值是b。
#include <stdio.h>int *fmax(int *,int *) /*函数的声明和下面的定义参数类型不一致,应该改成指针类型*/
void main()
{
int x,yint *c,*d
int *pmax
scanf("%d%d",&x,&y)
c=&x
d=&y
pmax=fmax(c,d)
printf("max=%d\n",*pmax)
printf("max=%d\n",*pmax)
}
int *fmax(int *a,int *b)
{
int *p
p=*a>*b?a:b
return p
}
1、指针变量的赋值,分为定义时赋值(初始化)和单独赋值,如:int x
int * px=&x //定义时赋值,也称初始化,注意这里的*是跟随int的,即变量px是int *类型变量! 实际上的赋值语句是px=&x
int * py
py=&x //单独赋值,将py指向x
*py=10 //这里的*,是引用指针中的数据操作符,*跟随的变量必须是指针类型变量,否则会出错! *py就是x,这里相当于x=10
2、指针变量作为函数的参数时,子函数可以通过指针引用实参地址中的数据,达到修改实参地址中的数据。如:
#include <stdio.h>
void func( int a, int b, int *pmax )
{
if ( a>b ) *pmax=a
else *pmax=b
}
void main()
{
int a=2,b=3,max=0
func(a,b,&max )//这里将变量max的地址传递到子函数,子函数中通过该地址,可以修改max的值,达到子函数结束后,max能带回运算结果的效果。
printf("max=%d\n", max )
}