我认为C语言的核心就是指针和对内存的操作,而操作内存就是由指针实现的,所以说指针真的非常非常重要,在后边的数据结构的学习中更要用指针,如果你立志要走C系统的开发这条路,那么你就应当精通指针的各种应用。下面写一点博主在学习指针时的一点小心得,小体会(仅仅一家之言)。
在刚学习指针时是真的一头雾水,感觉好难理解啊,这到底是个什么鬼?为何如此之难?不过在经过很长时间的纠结后博主还是有所体会。
指针:
指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points
to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。
运算符* 和& ,“*”的意思是取出这个地址存储的内容,“&”的意思是取出存储这个值的地址(取地址符)
例如:
int *a;
这个a就是一个指针,此时a存储的是一个地址。
指针的初始化:
既然指针是一个地址,那么初始化时就应当赋给指针一个地址作为初始值。
int *a;
int b=5;
a=&b;
此时a的值为一个地址(这个地址是随机分配的),
此时b的值为一个int型的常量5,此时*a的值正是5;
现在就两个表达式进一步说明指针:
int c=4;
int *p=&c;
上边声明了一个int型常量c和一个指向int型的指针p。
现在讨论赋值问题:
地址(&c),(&p),(++p),(p++)都是不能当作左值来赋值的。
地址中包含的内容(常量)(++*p),(*p)++,++*++p,也不能当作左值来赋值。
指针同样可以进行算术运算,对它加上N,就等于它向后移动N个元素,当指针进行减法运算或者比较运算时(这两个或多个指针都要指向同一个数组中的元素);
使用指针时应当注意的地方:
1.错误地对一个未初始化的指针变量进行解引用。
2.错误地对一个NULL指针进行解引用。
3.向函数错误地传递了一个NULL指针。
4.未检测到指针表达式的错误,从而引起错误。
5.对一个指针进行减法运算,使它非法地指向了数组的第一个元素的前面的位置。
6.小心使用++P和--P这类表达式,极有可能越界导致严重后果。