C语言 指针变量作为函数参数

指针:就是地址
&a:获取a的地址 取地址符
*p; //p是一个整型指针变量
*p; //解引用 或者称为 间接访问,访问p所指向的内容

例:输入a,b两个整数,按先后大小输出

  • 法一:用指针方法处理
int main()
{
    int* p1, * p2, * p, a, b;
    printf("请输入a和b:");
    scanf_s("%d%d", &a, &b);
    p1 = &a; 
    p2 = &b;
    if (a < b)
    {
        p = p1;
        p1 = p2;
        p2 = p;
    }
    printf("max=%d,min=%d\n", *p1, *p2);
    return 0;
}
  • 法二:用指针类型的数据作函数参数
void Swap(int* p1, int* p2)
{
	int tmp = *p1;
	*p1 = *p2;
	*p2 = tmp;
}
int main()
{
	int a = 10;
	int b = 20;
	Swap(&a, &b);
	printf("%d  %d", a, b);
	return 0;
}

请注意交换* p1和* p2的值是如何实现的

以下均是错误演示

void Swap_err1(int a,int b)//错误  没有传指针
{
	int tmp = a;
	a = b;
	b = tmp;
}

由于单向传递值传递方式,形参值的改变不能使实参值发生改变

void Swap_err2(int *p1,int *p2)//错误  没有解引用
{
	int* tmp = p1;
	p1 = p2;
	p2 = tmp;
}

用指针变量作函数参数时同样遵循单向传递的规则
不可能通过调用函数来改变实参指针变量的值,但可以改变实参指针变量所指变量的值

//野指针
void Swap_err3(int *p1, int *p2)
{
	int* tmp;//没有初始化  随机值
	*tmp = *p1;//崩溃点
	*p1 = *p2;
	*p2 = *tmp;
}

野指针 也称悬挂指针,你不能访问的地址

结论:
在一个函数中能修改一个函数的值有两个条件
1.传指针
2.解引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值