C语言指针学习

指针的学习

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

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

2.关于*p操作

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

指针代码编写

用动态数组编程输入任意m个班学生(每班n个学生)的某门课的成绩,计算最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。其中,m和n的值由用户从键盘任意输入(不限定m和n的上限值)。

posted on 2017-09-02 13:42  吕宇轩  阅读(243)  评论(0编辑  收藏  举报