谈谈我对指针的认识

前言

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中,文件指针是一个用于指示文件位置的特殊指针。它可以用于在文件中定位、读取和写入数据。C++提供了多种用于操作文件指针的函数和操作符。 文件指针通常与`std::fstream`类一起使用,该类提供了对文件的读写操作。下面是一些常用的文件指针操作: 1. `seekg()`和`seekp()`: 这两个函数用于设置输入和输出文件指针的位置。`seekg()`用于设置输入文件指针的位置,`seekp()`用于设置输出文件指针的位置。这些函数接受一个参数,表示要设置的位置。例如,`seekg(0)`将文件指针移动到文件的开头。 2. `tellg()`和`tellp()`: 这两个函数用于获取输入和输出文件指针的当前位置。`tellg()`返回输入文件指针的当前位置,`tellp()`返回输出文件指针的当前位置。 3. `eof()`: 这个函数用于检测文件是否已经到达末尾(End of File)。当文件指针指向文件末尾时,`eof()`函数返回`true`,否则返回`false`。 4. `good()`: 这个函数用于检测文件的状态是否良好。当文件状态正常时,`good()`函数返回`true`,否则返回`false`。 下面是一个示例,展示了如何使用文件指针在C++中进行文件操作: ```cpp #include <iostream> #include <fstream> int main() { std::ofstream outfile("file.txt"); // 创建输出文件流对象,并打开文件 if (outfile.is_open()) { outfile << "Hello, World!" << std::endl; outfile.close(); // 关闭文件 } else { std::cerr << "Failed to open the file." << std::endl; return 1; } std::ifstream infile("file.txt"); // 创建输入文件流对象,并打开文件 if (infile.is_open()) { char ch; infile.seekg(7); // 将输入文件指针移动到第8个字符位置 infile.get(ch); // 读取当前位置的字符 std::cout << "Character at position 8: " << ch << std::endl; infile.seekg(0, std::ios::end); // 将输入文件指针移动到文件末尾 std::streampos fileSize = infile.tellg(); // 获取文件大小 std::cout << "File size: " << fileSize << " bytes" << std::endl; infile.close(); // 关闭文件 } else { std::cerr << "Failed to open the file." << std::endl; return 1; } return 0; } ``` 在上述代码中,我们首先使用`std::ofstream`对象创建输出文件流对象,并打开名为"file.txt"的文件。然后,我们向文件中写入一行文本。 接下来,我们使用`std::ifstream`对象创建输入文件流对象,并打开同样的文件。我们使用`seekg()`函数将输入文件指针移动到第8个字符位置,然后使用`get()`函数读取当前位置的字符,并将其输出到控制台。 然后,我们使用`seekg()`函数将输入文件指针移动到文件末尾,并使用`tellg()`函数获取文件大小。最后,我们关闭输入文件。 通过使用文件指针操作,我们可以在C++中定位和操作文件中的特定位置,以实现更灵活的文件读取和写入操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值