C语言指针变量的赋值和做函数的参数

2024-11-27 04:06:08
推荐回答(4个)
回答1:

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

回答2:

左边的GetMax函数返回一个int类型的max
右边的GetMax函数没有返回值,函数参数是int类型的变量a,b,c和指向int类型变量的指针变量m
在调用GetMax函数时,函数参数中的max是指针变量,调用指针都要加上&表示调用的是指针地址。你这样记好了,如果遇到指针,定义函数的参数中要加*,调用函数的参数中要加&,一般都是这个规律。

回答3:

左边传的是数值。这样传过去,max这个变量自己的值不会出现变化。靠return来返回运算结果。想应的你要用返回值,也要用东西来接着他。
右边传过去的是max的地址。根据计算结果会改变max的值。直接输入地址我没试过。不建议人脑来指定内存地址,毕竟你不知道你指定的这组数字代表的内存现在装了些什么。

回答4:

是一样的,*pi=&i只是在定义的时候把 i 的地址给 pi指针(px指向x的地址)。“为什么右边同样是地址,左边不相等呢?”这段不知道什么意思?

它们的区别是 左边是利用返回值来读函数,而右边是利用函数调用, 因为只有只有指针才能修改地址的值,要传个地址给它,调用函数中的max要取 *,获取它的值。