`

谈谈我对指针的认识

 
阅读更多

前言

因为之前我学的是信息与计算这个专业(计算机这个专业是大二时转的),所以一开始接触数据结构(大二开的)这门课程,感觉很吃力,不过后来发现也确实很难。

为了学习数据结构,去过图书馆借了相关书籍。一开始看的时候简直就是一头雾水,什么都不懂,连指针是什么也不知道,看了一两天就放弃了。想想还是得把基础捡起来,然来看了问同学建议的一些视频,大概看了1个月左右,决定把再来看数据结构,后来发现还是看不懂,加上那时又临近考试,所以就没去再看了。到了大二下学期,慢慢接触java这门语言,感觉java比c++好学,而且java封装性特别好,很多方法和数据结构(如:集合框架)都帮你封装好了,只要会调用就行,那时感觉数据结构离我原来越越远了,因为基本上那时学java几乎没有用到数据结构,而且到了大三,包括学jsp动态网页技术,mvc模式,ssh框架等等,基本上没有自己去写算法,只是按部就班的执行自己写的sql语句或hql封装语句来对bean实体类对象或集合进行增删改查。大三下学期,我觉得很幸运的是能帮老师做系统,让我慢慢了解了ssh分层结构,尽管后来自身感觉那个系统本身就不怎么样,几个人一起分工做,但是这样无形中还是会增加代码冗余度(有些功能一样的可以本来是直接调用相同接口的),后来那个系统就像摆积木一样的完成了。虽然那个系统并不怎么好,而且还是二次开发,但是对于我这个初学者来说,还是学到了一点东西。

项目心得:在开发过程中,很少用到什么数据结构,你要做的主要是了解需求、建表、实现业务逻辑等,至少刚开始是这样的。

考虑到以后这个行业对java开发者的要求可能会更高,而且数据结构又是软件中的核心课程,所以想借这个暑假把数据结构捡起来。

正文

数据结构主要用来解决数据存储问题,它主要研究如何把现实中大量而复杂的问题以特定的数据类型(个体)和特定的存储结构(个体之间的联系)保存到内存中。而在此基础上为实现某个功能(如数据的查找,删除,排序等)进行的相应操作(解题的方法和步骤)称为算法。下面以C语言为例,指针可谓是C语言的灵魂,同时也是学习数据结构的基础。以前学C++的时候一直很苦恼,不知道什么是指针,更不用说怎么去使用指针了,而且数据结构里面的指针可以说是随处可见,所以要学数据结构之前先了解指针非常重要。指针是什么?指针其实就是地址,而地址是内存单元的编号(不能重复),所以指针本质其实是一个(操作受限的)非负整数。它的范围是0~4G-1。

举例说明1(如何定义指针):

int *p; //这里p是一个指针变量,int *表示p变量只能存储int 类型变量的地址.

int i=1;//定义整型变量i,并赋初值1

p=&i;//p保存i的地址,此时p指向i变量的地址,修改p或i不会影响另一个变量的值。

举例说明2(如何跨函数修改局部变量的值):

#include<stdio.h>
void f(int *p) //定义了一个形参,该形参的名字叫p,它的类型是int *
{
 *p=100;
}
int main()
{
 
 int i=9;
 f(&i); //将i的地址传给p指针,此时p指向i变量的地址,*p和i变量等价
 printf("i=%d\n",i);
 return 0;
}
      ----运行结果:i=100

举例说明3(指针在数组中的使用)--数组存放元素的地址是连续的:

void Show_Array(int *p,int len)
{
   p[0]=-1;
   printf("%p",p);
}
在main()函数(也叫入口函数)中:
 int a[5]={1,2,3,4,5};//这里的数组变量名a等价于&a[0],&a[0]本身就是int *类型,a[0]就等价于*a
 Show_Array(a,5);//原理:p[i]=*(p+i)=*(a+i)=a[i]

注意:

1、因为a[3]=*(a+3),所以a[3]就是3[a],且指针索引速度比下标快;
2、所有的指针变量只占4个字节(因为地址总线是占32位的),通常用第一个字节的地址表示整个变量的地址;
3、无论什么类型的变量,只要修改它的地址,就可以修改它的值,且一个字节对应一个地址。

结束语

若文中有关对指针的认识有误或你要有更深的见解,还望指点微笑,今天就写到这,明天待续~

有问题可以相互交流和学习,QQ:2413698298

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics