指针这个概念是一个比较头疼的概念,如果学过数据结构还懂点编程语言的人应该好懂一点,下面是我多年学习以来对于指针的一些理解.
1.首先你需要明白的是指针是一个变量(在没有声明const的特殊情况下),这就够了.如果你需要我解释什么是变量,那就请你别象下看了!
2.接下来要知道的是指针是一个特殊的变量,听其名就可以理解,不过要注意的是他所指向的是一个内存中的地址(所谓学习下数据结构就能理解)
3我也不知道指针是怎么弄出来的,但是在编程的时候我们需要用到他,所以我们必须理解因为在c.c++,甚至在c#中以及其他各种语言都会有怎么一个概念.象指针一样的东西.
4我们来搞清楚一个概念指针其实包括4部分的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。
举几个列子吧!
(1)int *ptr; //指针的类型是int *
(2)char *ptr; //指针的类型是char *
(1)int *ptr; //指针所指向的类型是int
(2)char *ptr; //指针所指向的的类型是char
指针的值是指针本身存储的数值,这个值将被编译器当作一个地址 (平时在编程的时候很少看见所以容易搞混)
其实可以用&取地址符号来看他的直
指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测一下就知道了
运算符&和*
这里&是取地址运算符,*是...书上叫做"间接运算符"。&a的运算结果是一个指针,指针的类型是a的类型加个*,指针所指向的类型是a的类型,指针所指向的地址嘛,那就是a的地址。*p的运算结果就五花八门了。总之*p的结果是p所指向的东西,这个东西有这些特点:它的类型是p指向的类型,它所占用的地址是p所指向的地址。
举个列子
int num=5;把我附值给num变量
int &ref=num;&ref返回的是一个指针指向num的地址
int *p=&ref;把num的地址给了p指针 可以怎么简单的理解*P就是num的地址,p就是num的地址的地址
在举个简单的列子int *p=num 这里我们就可以理解为指针p指向了num的地址(即指针所指的地址),而*p就是num的值,
一个很实用的应用就是按地址传递参数
ovid swap(int *m,int *n)
{int temp
temp=*m;
*m=*n;
*n=temp)
如果我们用swap(&a,&b)调用就会让他们的直互变,分析一下:int *M=&a这个其实上面的已经讲了,理解了这个就能理解上面的按地址传递了*m其实就是一个地址,就是把2个指针所指向的地址互换了;而*m 既为地址里的值,m为指针指向的地址.这里就知道具体怎么应用就可以了,而不需要知道他在编译的时候是怎么处理的.
效果就等于 swap(a,b) temp=a;a=b;b=a 这个就是通过引用参数进行传递的
}
指针指向一个对象或者指向一个对象的引用都是指向对象的首地址
先写到这里吧!待续