C语言中,指针在一个自定义且不带返回值是如何改变外部一些变量的(指针与函数的相互作用)

如果自定义一个函数,没有任何返回值,而形参是一个指针传入这个函数,在这个函数中,无论如何改变指针所指的方向,函数结束后对外部数据没有变化,唯独通过指针,来间接改变函数以外的变量的值(例如令*p = 一个新的值)。那么此时此刻,在内存中p的地址里的数据已经改变,而函数结束后,该函数对外部做出的贡献就是把原来p的地址里的数据改变了,其他都没变,包括p指针所指的地址。

#include<stdio.h>
void change1(int *y)
{
	int c = 1000;
	y = &c;

};

void change2(int *y)
{
        int c = 20;
        *y = c;//通过指针间接修改原来y所指的值
};

void main()
{
	int a = 3;
	int *b = &a;
	printf("%d\n",a);
	printf("%d\n",*b);
	printf("%d\n",b);
	change1(b);
	printf("%d\n",a);
	printf("%d\n",b);
	printf("%d\n",*b);
        change2(b);
        printf("%d\n",a);
	printf("%d\n",b);
	printf("%d\n",*b);
}

输出结果

3
3
1703740
3
1703740
3
20
1703740
20
Press any key to continue

无论经过多少外部函数,指针b的地址在main()中始终没变,而在change2函数中通过b指针把a的值修改了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值