彻底搞定c指针

一直对c指针心怀崇敬,因为总是容易糊涂。看了某大神写的《彻底搞定c指针》更是心怀感激,整理笔记一篇,以表谢意。

1、首先问问自己指针到底是什么东西?

    指针就是路标,而不是实际的路。指向真正的路。

2、指针和数组名的区别是啥?

    数组名也是指针,但是不可修改。是指针常量!

3、const int *pi与int *const pi有何区别?

    const int *pi 这里const 修饰了 *pi,所以*pi不能被改变,但是pi可以!

    int *const pi 这里const修饰了pi,所以pi不能被改变,但是*pi可以!

4、值传递

    值传递就是把变量值赋给了函数变量,但变量本身不变。

    函数定义:exchange1(int x, int y)

    函数调用:exchange1(a,b);

    结果:a,b的值没有变化

5、地址传递

    将地址传给函数指针,将函数指针指向的内容改变,就改变了变量本身。

    函数定义:exchange2(int *px, int *py){ int tmp=*px; *px=*py;*py=tmp;}

    函数调用:exchange2(&a,&b);

    结果:a,b的值互换

6、引用传递

    将变量起了个别称,改变别称的值,其实是改变到了变量本身。

    函数定义:exchange3(int &x, int &y){ int tmp=x ;x=y; y=tmp;}

    函数调用:exchange3(a,b);

    结果:a,b的值互换

7、指向指针的指针

    注意指针的传递情况也有值传递,地址传递,引用传递,原理一样。

8、函数指针

    函数指针比较奇葩,用的方式有好几种,这里写一种就好了。

    void MyFun(int);//声明函数

    void (*FunP)(int);//声明函数指针

以下是辅助学习的代码

#include<stdio.h>
#include<stdlib.h> 

void MyFun(int);
void (*FunP)(int);

void MyFun(int x){
     printf("myfun--%d\n",x);
     }

int main(){ 
   
     
    char a , *pa;
    a=10;
    pa=&a;
    *pa=20;
    printf("%d\n",a);
//1.const int*pi // 
    
    int i1=30;
    int i2=40;
    const int *pi=&i1;
    pi=&i2;
    i2=80; //这里不能用 *pi=80 因为const修饰了*pi,所以不能修改。
    printf("%d\n",*pi);
//2、int *const pi; // 
   
    int i3=30;
    int i4=40;
    int *const p2=&i3;
    i3=80;
    *p2=80;//这句可以。*p2可以修改。 
  //  p2=&i4; //这里不能用p2=&i4; 因为const修饰的是p2 
     printf("%d\n",*p2);
     
//3、int *p5指向 const int /       
    const int i5=50;
    int *p5;    
   // p5=&i5; 不对滴!!      
    p5=(int *)&i5; //虽然强制转换了,仍然不可以改变i5变量原来的值。 
    *p5=80;  
    printf("%d\n",i5);
    printf("%d\n",*p5);

//4、const int *p6指向 const int i6/ 
    const int i6=40;
    const int *p6;
    p6=&i6; 

    
//5、const int *const p7 / 
    int i7;
    const int *const p7=&i7;

//6、函数指针///
     MyFun(10);
     FunP=&MyFun;
     (*FunP)(10);    
     
    system("pause");
        return 0;
    }


运行结果

20
80
80
50
80
myfun--10
myfun--10



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值