指针

2017-08-19  本文已影响0人  贝克街的猫大哥呀

在JAVA里的指针感觉有点--若隐若现,说它存在吧,也行,说它不存在吧,也可以--反正没怎么体现

然而在C中,指针是一个非常普遍的存在-----

先给个定义吧

指针,就是储存的变量的内存地址!!本质,是内存地址!

void main(){

  int i = 90;

  int *p = &i;

  printf("i的内存是%#x\n",p);

  printf("p的内存是%#x\n",&p);

   printf("p的内存指向的值是%d\n",*p);

   system("pause");

}

以上代码中,第一个输出的p,就是变量i的16进制内存地址,&p,就是p本身的16进制内存地址! *p,就是p的地址对应的值!固是输出90!  

其中的 int *p=&i;

这样就定义了一个p,p就是一级指针!

那有没有这种写法:

int p=&i;

没有! 这样写,编译都通不过,直接报错,所有要定义指针,必须写成 *p

当然,也可以写成

int* p=&i;  

就是把*靠近int还是靠近p--就是个无聊的写法而以-----

从这里可以看出,指针是有类型的,这,就是一个int类型的指针。

这里总结一下,int *p,这样定义,才是定义了一个指针p!   

这里面还有两个事

printf("i的内存是%#x\n",p);    其中的%#x指的是16进制!

在VS中,可以直接查看这个16进制字符对应的值是多少

方法是,调式--窗口--内存 ,就可以看到对应的值了,当然,你还要反键选一下16进制值

当改变一个指针p的*p时,就相当于重新赋值了结果,如

int i = 90;

int *p = &i;

*p = 200;

这就表示将i的值又变成了200!是的,是改变了i的值!!! 最后一行的 *p,指的就是实际的值!和定义的int *p是不一样的,关于这里,再作一下解释、

int *p,这是定义出一个p指针的必须的写法!这样写,才表示定义了一个int型的指针

当定义完成后,再出现 *p,是表示p指向的地址的对应的值!

所以这里,*p=200 ,就相当于,把i的值,又变成了200! 逻辑就是这样的--很通顺是不是--

上一篇下一篇

猜你喜欢

热点阅读