指针详解2

总结:

int i ;声明变量的实质是在内存中申请一个整型变量宽度的空间。

const和int哪个放前,哪个放后效果都一样。

指针变量可以指向别的内存地址,指针常量不许再次赋值。

-------------------------------------------------------------

int i1=30;
int i2=40;
const int * pi=&i1;
pi=&i2;    //4.注意这里,pi可以在任意时候重新赋值一个新内存地址
i2=80;    //5.想想看:这里能用*pi=80;来代替吗?当然不能

int const *pi=&i1; pi前没有用const修饰,所以pi是一个指针变量,能被赋值重新指向另一内存地址。const修饰的是整个*pi,所以*pi是常量,不能被赋值。

可以通过pi指向别的内存地址,但是其中的值不能通过*pi直接进行修改

-------------------------------------------------------------

int i1=30;
int i2=40;
int * const pi=&i1;
//pi=&i2;    4.注意这里,pi不能再这样重新赋值了,即不能再指向另一个新地址。
   //所以我已经注释了它。
i1=80;    //5.想想看:这里能用*pi=80;来代替吗?可以,这 里可以通过*pi修改i1的值。

可以通过*pi修改i1的值,永远只能指向初始化地址,其中的值可以修改。

扫描二维码关注公众号,回复: 2928499 查看本文章

------------总结一下两者的区别:指针常量所指向的地址是不能改变的,但是地址中的值是可以通过*pi改变的。指针变量的地址是可以改变的,只是不能通过指针修改其中的值。

----------------------------------------------------------------------------------------

就像某一数据变量的内存地址可以存储在相应的指针变量中一样,函数的首地址也可以存储在某个函数指针变量里,通过函数指针变量调用所指向的函数。

函数指针:void myfun(int x); 

                 void (*funp)(int);//声明一个用以指向同样参数,返回值函数   的指针变量

其实myfun的函数名和funp函数指针都是一样的,即都是函数指针,myfun函数名是一个函数指针常量,而funp是一个函数指针变量

但如果都如(*myfun)(10):这样,书写与读起来不方便和不习惯,所以才设计成myfun(10)这种形式调用,赋值时,可以是funp=&myfun的形式,也可以是funp=myfun。

--------------------------

函数指针变量是一个变量,当然也可以作为某个函数的参数使用。

引自:https://www.cnblogs.com/qiaogaojian/p/5861554.html

猜你喜欢

转载自www.cnblogs.com/ymd12103410/p/9550521.html