C语言指针总结

来源:互联网 发布:golang socket 框架 编辑:程序博客网 时间:2024/05/12 07:43

       指针一直是学习C/C++语言的一个重点与难点。只有熟练地掌握了指针,才可以说掌握了C语言,C语言的最吸引人的地方也是指针,因为它可以任意地操作内存,编写程序中有着极大地自由空间,因此,也有人说指针是C语言的灵魂。而且指针也是各大公司面试程序员的必考内容。现我将自己所学的关于指针的知识进行了总结,希望与大家一起学习。

1.指针事实上是一种数据类型,和int 基本类型一样。指针也是一种变量,占有内存空间,保存的是内存地址。

2.关于*p操作

(1)在声明指针中,“*”号表示所声明的变量是一个指针。

(2) 在指针使用时,“*”号表示操作指针所指向的内存空间中的值。

(3)当*p放在等号的左边时,相当于给内存赋值。

(4)当*p放在等号的右边时,相当于从内存中获取值。

<span style="font-size:18px;">int *p = NULL;//声明p是一个指针变量int i = 3,j = 0;p = &i;//p指向i所在内存*p = 5;////将p所指的内存的值改变为5,此时变量i的值也是5j = *p;//将*p把指的内存空间的值(i的值)赋值给j</span>


注:指针变量和它所指向的内存块是两个不同的概念。

3.指针的数据类型是指它所指向的内存空间的数据类型。当指针步长自加的时候,是根据所指向的内存的数据类型来确定的。

若在32位的系统上,一个指向整型数据的指针,自加的话,是加4.

int *p = &I;p ++;//<==>(unsigned int)p+sizeof(int);


4.通过指针来改变变量的值是指针的一个重要应用。这是指针作为函数参数的精华。函数调用时,n指针(形参)改变n-1指针(实参)的值。如:1级指针形参改变0级指针实参的例子。

Swap(int*a,int *b){Int  p = *a;*a = *b;*b = p;}//这样可以将实参的值也改变。

5.数组作函数参数的时候会退化为一个指针

void fun(int a[10])<<==>>void fun(int *a)//无论实参是包含多少个元素的数组,但作为函数参数只是把函数首地址传递给形参。


6.关于解决野指针的方案

(1)定义指针时,把指针变量赋值为null;

(2)释放内存时,先判断指针变量是否为null;

(3)释放内存完毕后,把指针变量重新赋值为null

       当然指针不仅仅只是这么简单,这只是指针的基础,但是其他指针的使用全部是建立在这基础之上,因此,熟练掌握指针的基础是十分必要的,并且加以利用,这样就可以解决在工作学习中遇到更加复杂指针的情况了。如有不当之处,请大家指出,相互学习,共同进步。

1 0