`

谈谈我对指针的认识

 
阅读更多

前言

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

为了学习数据结构,去过图书馆借了相关书籍。一开始看的时候简直就是一头雾水,什么都不懂,连指针是什么也不知道,看了一两天就放弃了。想想还是得把基础捡起来,然来看了问同学建议的一些视频,大概看了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

分享到:
评论

相关推荐

    指针重点难点的解析,教你如何认识指针

    首先,我们来谈谈指针的声明。在C语言中,我们使用星号(*)来声明一个指针。例如,如果我们想声明一个指向整型变量的指针,我们会写成`int *ptr;`。这里的`ptr`就是一个指向整型数据的指针,而星号表示`ptr`是一个...

    谈谈对Java的认识.pdf

    "谈谈对Java的认识" Java是一种高级编程语言,它的出现改变了整个软件开发的战略, 从单机时代向着以网络为中心的计算机时代转移。Java语言的特点包括简单、高级、面向对象、分布式、解释型、健壮、安全、体系结构...

    谈谈C语言教学心得.pdf

    首先,作者建议通过激发学生的学习兴趣,让学生正确认识C语言程序设计课程的重要性来改善教学状况。利用与计算机编程相关的有趣案例,如计算机战胜国际象棋大师或网络上的Flash动画,来吸引学生注意力,提高他们对...

    C++面试题,针对资深开发工程师面试题目含详细解答

    2 谈谈你对拷贝构造函数和赋值运算符的认识 3 用C++设计一个不能被继承的类 4 简述队列和栈的异同 5 深拷贝和浅拷贝的区别是什么 6 栈上分配内存和堆上分配内存有什么区别? 7 C++ 的一个类中,静态成员函数和普通...

    一、静态链表的定义 二、静态链表的设计 三、静态链表的操作 总结 附录 前言 你认识静态链表吗?听起来是不是很陌

    静态链表一、静态链表的定义 二、静态链表的设计 三、静态链表的操作 总结 附录 前言 你认识静态链表吗?听起来是不是很陌生呢?... 首先来谈谈如何来对已申请结点进行管理,将静态链表0位置的结点设置

    小学数学二年级上册《认识时间》课件.ppt

    在小学数学教育中,对时间的认识不仅是日常生活中的基本技能,也是培养学生逻辑思维能力的重要途径。二年级的《认识时间》课程是一个关键的教学环节,它不仅涉及对时钟结构的理解,还包括时间的读取、表示方法以及与...

    【转】谈谈 JVM 内部锁升级过程(csdn)————程序.pdf

    JVM(Java虚拟机)内部锁升级的过程是指Java对象在多...理解这一过程有助于我们更好地编写多线程程序,并对JVM的同步机制有更深入的认识。在实际编程中,选择合适的锁类型和调整JVM参数可以进一步优化应用程序的性能。

    C/C++程序员面试指南.杨国祥(带详细书签).pdf

    面试题11:谈谈对拷贝构造函数和赋值运算符的认识 面试题12:写出当定义#define _INMAIN 0和不定义时代码打印结果 第9章 继承与多态 9.1 继承 面试题1:指出程序的错误 面试题2:用C++设计一个不能被继承的类 9.2 虚...

    《微机原理与汇编语言》期终考查试卷(B卷).docx

    这不仅需要理论知识的支撑,还需要对实际汇编指令有深刻的认识。 计算问题,如求等差数列的和,考验的是学生对数学基础的运用能力。在汇编语言中,通过简单的循环结构和逻辑运算,可以实现对这类数学问题的快速求解...

    C语言形象比喻应用.doc

    首先,我们来谈谈指针这一难点概念。在C语言中,指针是一个经常让初学者感到迷惑的概念。它代表内存中的一个位置,但更重要的是,指针本身就是一个变量,它存储着另一个变量的地址。为了让学生形象理解这一概念,...

    五年级数学下册第五单元练习题精选.doc

    首先,让我们来谈谈时间旋转问题。这部分的内容不仅仅是让学生了解钟表上的时间读取,而是通过钟表指针的旋转来引入角度的概念。这里,钟表上的指针每小时移动30度,让学生学会将时间的变化与角度的变化联系起来。...

    2018中考物理试题分类汇编专题10力力的测量和表示含解析20180809171

    这个问题不仅考察了学生对力的相互作用的认识,还关联到了运动学的知识,是中考试题中经常出现的综合题型。 在力的测量方面,测力计是我们常用的一种测量工具。在中考物理试题中,我们可能会遇到使用橡皮筋测力计来...

    全国计算机二级内容学习.pdf

    在当今这个信息爆炸的时代,掌握数据结构与算法对于计算机...通过本篇文章的学习,希望读者们能够对数据结构与算法有一个系统性的认识,并能将这些知识运用到实际问题的解决中去,提高自身的编程能力和解决问题的效率。

    北师大版小学数学教案:三年级上册平移与旋转.doc

    首先,让我们来谈谈平移。平移是一种常见的几何运动,指的是物体沿着直线路径移动而不改变其形状和大小。在我们的日常生活中,平移现象无处不在,如电梯的上升与下降、门的开合、滑梯的滑行等。通过将这些生活中的...

    C语言基础知识(包含算法和国际竞赛作品).rar

    通过系统地学习和实践,学习者可以逐步掌握各种算法,包括但不限于排序、查找、图论、动态规划等,这不仅有助于加深对程序设计的认识,还能有效提升解决问题的效率和能力。 进一步,当学习者对算法有了初步的理解...

    51单片机入门教程-程序源码

    总之,这个51单片机入门教程的源码集合是一份宝贵的教育资源,它能帮助你从零开始,逐步建立起对51单片机及其应用的深刻认识。通过深入学习和实践,你将能够独立设计和实现简单的嵌入式系统项目。在学习过程中,不要...

    java代码规范

    没有规范的对输入输出参数的规范,没有规范的异常处理,没有规范的日志处理等等,不但导致了我们总是出现类似空指针这样低级的bug而且还很难找到引起bug的原因。相反,在规范的开发中,bug不但可以有效减少,查找bug...

    小学五年级数学上册轴对称平移旋转PPT教案.pptx

    在小学五年级的数学教学中,轴对称、平移和旋转作为几何图形变换的重要组成部分,不仅是学生认识和理解几何世界的基础,还是培养学生空间想象力与抽象思维能力的关键。今天,我们将通过轴对称平移旋转PPT教案的框架...

    数据结构演示软件

    使用数据结构演示软件学习,能够帮助初学者快速建立对数据结构的直观认识,同时也适合经验丰富的开发者复习和提高。这种工具能够把理论知识转化为实践操作,让学习过程更生动、更具趣味性。因此,对于任何想要深入...

Global site tag (gtag.js) - Google Analytics