【C语言】指针的真正奥义!!!

目录

理解指针:

指针所指向的时变量的地址,并且可以通过指针直接改变变量的值

真正奥义:

普通函数换值

用指针在函数里换值

  * 3.用函数传地址给指针

总结:


理解指针:

指针所指向的时变量的地址,并且可以通过指针直接改变变量的值

例如:

#include<stdio.h>
int main()
{
	int a = 0;             //定义int型变量
    int* p = &a;           //定义int型指针并指向a的地址(&表示地址)
    *p = 1;                //p指针指向的地址的值赋值为1,相当于a=1
	printf("%d\n", a); 
	return 0;
}

 结果a = 1

 

 首先:指针定义的类型必须与所指变量类型相同。如上图都为int型。

其次:定义指针可以理解为先int* p; 再p = &a; (p指向a的地址)这个也是正确书写,我上面写的就相当于把2个p融合为1个p来书写。

最后:*p是等于a的值,就是*p == a;所以*p改变,a的值也要改变。


真正奥义:

  1. 普通函数换值

     在没指针情况下在函数中改变传递变量值

    #include<stdio.h>
    void hanshu(int b)           //函数解释    a传值给b
    {
    	b = 1;                   //在函数中使b赋值为1
    }
    int main()
    {
    	int a = 0;
    	hanshu(a);               //函数调用
    	printf("%d\n", a);
    	return 0;
    }

    结果:a = 0

  2. 用指针在函数里换值

          依然是传变量,在函数里再用指针

#include<stdio.h>
void hanshu(int b)        //函数传值给b
{
	int* p = &b;          //指针p指向b的地址
	*p = 1;               //指针p指向b的地址的值赋值为1
}
int main()
{
	int a = 0;
	hanshu(a);            //函数调用
	printf("%d\n", a);
	return 0;
}

 结果:a = 0;说明在函数中指针定义并不能改变main函数里的传值变量


  * 3.用函数传地址给指针

#include<stdio.h>
void hanshu(int *p)         //函数解释使a的地址传递给p(相当于指针p指向a的地址)
{ 
 	*p = 1;                 //指针p指向a的地址的值赋值为1
}
int main()
{
	int a = 0;
	hanshu(&a);             //函数调用
	printf("%d\n", a);
	return 0;
}

 结果:a = 1

 


总结:

1.可以看出,普通函数里换传递的值改变不了main函数里的变量的值

2.用函数传递地址,用指针接收可以在函数里改变main函数里的变量的值,这也是最重要的指针用法。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

helinliupi-何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值