在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! 逻辑就是这样的--很通顺是不是--