pipi666661的专栏

一直对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(&a,&b);

结果:a,b的值互换

6、引用传递

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

函数调用: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修饰的是p2printf("%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;}

运行结果

2080805080myfun–10myfun–10

人的一辈子唯一做的就是,不断地用你手中

pipi666661的专栏

相关文章:

你感兴趣的文章:

标签云: