数据结构与算法课程学习笔记2020/9/10


前言

这是个人在学习数据结构与算法这门课当中,遇到的问题以及解决方案,希望其中的一些东西能给大家一些参考和思考


提示:以下是本篇文章正文内容,下面的一些文章内容有些专业术语和对其中概念的理解,可能是错误的,敬请大佬指正。

一、对于大于4G的文件如何通过U盘传输

参考博客:[SD卡中FAT32文件格式快速入门(图文详细介绍)]https://blog.csdn.net/mjx91282041/article/details/8904705

课程的第一步就是安装VS2013(VS2019),但是,有一些同学没有提前安装,所以在上课的时候,老师要求大家进行VS的安装。
实际上,VS系列本身就是免费的(除了一些高端操作需要付费,但是初学者不会用到),官网链接: https://visualstudio.microsoft.com/zh-hans/
或者可以搜索微信公众号:软件安装管家

其中,就有针对WinRAR软件的使用。而针对大于4G的文件U盘传输,又两种方式,第一种是将U盘格式化,然后,将文件系统从FAT32更改为NTFS格式,由于需要格式化U盘,显然没有空U盘也是挺难的。参考博客:https://blog.csdn.net/DengShangYu_/article/details/90479973
https://blog.csdn.net/flyfish778/article/details/5254876
而第二种方式就是,使用压缩软件WinRAR,将其切分压缩,下面三张图片是具体的操作方式(添加文件到压缩文件→切分为分卷→确定)。
此处我将压缩方式设置为储存,为了加快压缩速度。
WinRAR的介绍:https://baike.baidu.com/item/%E8%A7%A3%E5%8E%8B%E7%BC%A9%E8%BD%AF%E4%BB%B6/86118
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、在VS调试三个工程的问题

1.工程

工程,听起来很高大上的样子,但是对于这门课中,我对工程的理解就是通过F(一个功能的)转换。若只有一个源文件的话,那么就只有一个工程。每个源文件实现的功能不一样,最好把不能功能的代码放到不同源文件里,这样方便以后修改或者移植 而且移交给别人的时候,别人也可以快速找到你代码的位置。由于都是独立的代码,所以需要调用。如果C的话,那么要用include包含头文件的方式引入另一个源文件的代码,如果是JAVA那么用import引入包名。

2.逐语句调试

逐语句进行的箭头,箭头所指的那一行代码,是还未进行的。
在这里插入图片描述

3.scanf_s的调用问题,scanf_s输入字符串时需要带缓冲区大小参数,即

#include <stdio.h>
int main()
{
char c[6];
scanf_s ("%s",c);//此处应该更换为scanf_s("%s",c,6)才正确
printf("%s",c);
return 0;
}

在这里插入图片描述
甚至还会出现更严重的情况,直接导致程序无法运行。
输入:china
引发异常:Ox0FA9E63C(ucrtbased.dll)处(位
于字符串.exe 中)引发的异常:0xC0000005:写
入位置0x00700000时发生访问冲突。

三、针对指针的指针讨论

指针的指针,参考博客https://blog.csdn.net/masterli1688/article/details/88248119,注意,其实,指针就是变量的地址。(把指针的概念和含义理解清楚,就很简单了)https://blog.csdn.net/soonfly/article/details/51131141
https://blog.csdn.net/ZackSock/article/details/101594794
针对于一个指针和指针的指针的一个问题,首先地址,如果int a;a=5;那么这里,就是给a开辟一个内存,并且把内容存进去。其次,针对监视窗口,如果监视了一个指针的地址,那么,当这个指针被更新时,int * p;p=&a;这里,p的地址前8位,就是将a的地址倒序储存进去。而指针的指针,就是,储存指针变量的地址,例如int ** p1;p1=&p;那么,这里的p1更新后,时p的地址。
同时,在内存窗口,可以看到,储存的内容。而且,当储存的内容为字符串的时候,后面的ASCLL码,就是对应的内容。其实,后面的乱码,就是前面内存储存的ASCLL值。

以下为实例操作:
在这里插入图片描述

1. 首先,在程序运行前插入断点,然后运行程序。在调试菜单里面的“窗口”中,将监视和内存打开,同时,将需要的值进行监视。
在这里插入图片描述

2.如图,将第一个变量的地址,通过监视读出。同时,可以在内存窗口看到实际情况。
在这里插入图片描述
3.可以从图中看出,监视窗口的,指针p的地址,已经有了。
在这里插入图片描述
4.按下F11键,执行“逐语句”调试,可以看到a在内存窗口和监视窗口的值,都更新为5了。
在这里插入图片描述
5.可以观察到,&a的内存,内容都更新,和a赋值的语句内存前部分一致。
在这里插入图片描述
6.在执行p=&a语句之后,p的地址前8位的两两倒序,其实和a的地址一致。
在这里插入图片描述
7.在执行p1=p语句之后,监视p1的地址以及p1的内存,可以观察到很多内容。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
8.执行a++语句之后,观察这三张图片可以看出,a的内容改变了。

有个很疑惑的点,就是我执行了a=5这个语句,我还未执行,p=&a这个语句,但是,我观察到p的内存值已经改变了,所以这个问题很疑惑。但是,在这个过程中,我p的指针p1也未执行,则它的内存为?????,这个还能理解。

之后,我有重新参考了三个资料,引用和指针有什么区别
浅谈指针与引用的区别指针的初始化,我重新又审视了自己的代码,发现一个很严重的问题,我的指针根本没有初始化,就开始使用了,而这是一个非常严重的错误!int* p,没有初始化时,p的指向是不明确的。若它指向非法地址,这时的操作会报异常;若它指向一个合法地址,这是非常危险的,因为这样可能更改一个正在使用的数值。

但是,和大佬讨论过后,首先,地址是1bit,int型整数时4bit。所以,实际上,在赋值之前指针p是cc cc cc cc。将内存窗口缩小后,就更加能理解了。在这里插入图片描述
在这里插入图片描述
实际上,是我窗口太大,观察到其他地址了。所以,一定要记住,地址是1bit,大家可以在内存窗口改变地址来查看。

下面是代码的实例(C语言):

#include <stdio.h>
int main()
{
	int a;
	int* p;
	int** p1;
	a = 5;
	p = &a;
	p1 = &p;
	a++;
	printf("%d", a);
	return 0;
}

总结

学习是需要与他人交流的,在自我学习之后,是很需要与他人讨论来更新自己的知识面和思维模式。CSDN上有很多学习的资源,在参考完之后,一定要实践,来进行操作。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值