指针变量

2019春第六周作业

落花浮王杯 提交于 2020-01-10 08:33:16
第六周作业 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/computer-scienceclass4-2018/homework/2890 我在这个课程的目标是 了解指针的用法 这个作业在那个具体方面帮助我实现目标 利用指针做题 参考文献 C语言程序设计II 一、本周完成的作业 基础作业 函数题 6-1 求两数平方根之和 (10 分) 函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。 函数接口定义: double fun (double *a, double *b); 其中 a和 b是用户传入的参数。函数求 a指针和b 指针所指的两个数的平方根之和,并返回和。 裁判测试程序样例: #include<stdio.h> #include <math.h> double fun (double *a, double *b); int main ( ) { double a, b, y; scanf ("%lf%lf", &a, &b ); y=fun(&a, &b); printf ("y=%.2f\n", y ); return 0; } /* 请在这里填写答案 */ 输入样例: 12 20 输出样例: y=7.94 1)

Windows SDK编程 API入门系列(转)

与世无争的帅哥 提交于 2020-01-10 08:00:28
本文转载自: https://www.cnblogs.com/yjkai/archive/2011/11/11/2245568.html 作者:yjkai 转载请注明该声明。 之一 -那‘烦人’的Windows数据类型 原创文章,转载请注明作者及出处。 首发 http://blog.csdn.net/beyondcode http://www.cnblogs.com/beyond-code/ http://hi.baidu.com/beyondcode Baidu文章地址: http://hi.baidu.com/beyondcode/blog/item/09370f24526d6b6835a80f54.html CSDN文章地址: http://blog.csdn.net/beyondcode/archive/2009/03/23/4015769.aspx Hello Everybody This is beyondcode 大家好 再次自我介绍一下 我是beyondcode, 这次心血来潮, 计划着做一系列关于Windows API 编程的教程,用于帮助一些在Windows API编程上有疑惑的,纳闷的,迷惑的新手朋友们。 先解释一些术语或名词吧 SDK是Software Development Kit的简写,也就是软件开发包的意思,其中就包含了我们写程序要用到的一些头文件,库

x86常用汇编寄存器

时光怂恿深爱的人放手 提交于 2020-01-10 04:51:47
通用寄存器 32位 16位 高8位 低8位 EAX AX AH AL EBX BX BH BL ECX CX CH CL EDX DX DH DL ESI SI EDI DI ESP SP EBP BP E:Extend,X:逻辑与算数 EAX (Extend Add):累加器,在乘法和除法指令中自动使用;Win32中,一般用在函数的返回值中。 EBX (Extend Base):基地址寄存器,DS(数据段)中的数据指针。 ECX (Extend Count):计数器,CPU自动使用ECX作为循环计数器,在自妇产和循环操作中常用,在循环指令(LOOP)或串操-作中,ECX用来进行循环计数,每执行一次循环,ECX都会被CPU自动减一。 EDX (Extend Data):数据寄存器。 以上的寄存器常用来保存各种需要计算的值。 EBP (Extend Base Pointer):基地址指针寄存器,SS(堆栈段)中数据指针。EZBP有高级语言用来引用参数和局部变量,通常称为堆栈基地址寄存器。 ESP (Extend Stack Pointer):堆栈指针寄存器,SS(堆栈段)中堆栈指针,ESP用来寻址堆栈上的数据,ESP寄存器一般不参与算数运算,通常称为堆栈指针寄存器。 ESI (Extend Source Improve):源变址寄存器,字符串操作源指针。 EDI (Extend

Linux C语言:指针与内存

二次信任 提交于 2020-01-10 00:08:49
1 . 计算机中的数据表示方法 单位:字节(byte) 1byte = 8 bit 计算用二进制 显示为十进制 编程为十六进制 2 . 内存管理 Q : 32位系统 最大使用4G内存? A : 32位系统,地址总线是32位,也就是寻址空间是32位; 32位指的是:给内存编号只能编到32个二进制位; 32根地址总线就是2 32 个状态; 2 32 = 2 10 *2 10 *2 10 *4=1k * 1k * 1k *4=1M * 1k *4=4G 64位系统可以管理2 64 (4G*4G)的内存 地址从0x0000 0000 0000 0000 到 0xFFFF FFFF FFFF FFFF 任意一个地址可以储存1个字节也就是8位2进制 其中,代码放在 代码段; 全局变量、常量、静态变量放在 数据段; 局部变量放在 栈; 3 . 变量和指针的本质 变量的本质是什么? 变量名它只是一个代号,代表一个内存地址空间 变量的本质就是内存 C语言无法对某个内存进行直接操作 指针也是变量,保存的就是内存地址 指针的本质就是地址 4 . 操作系统对内存的管理 32bit操作系统 : 指针4个字节 64bit操作系统 : 指针8个字节 只要是地址,不管指向什么类型,所占字节数都是相同的,指向函数地址也是一样。 5 . 函数栈以及数据段内存 最先分配的栈地址最大,从栈顶向下分配; 栈的特点:先进后出

mpi4py 中的访问文件数据方法

邮差的信 提交于 2020-01-09 23:28:15
在 上一篇 中我们介绍了 mpi4py 中的并行文件视图操作方法,下面我们将介绍访问文件数据的相关方法。 文件访问方法 MPI 环境下应用程序对文件的访问主要有 3 种特征:定位(positioning),包括显式偏移和隐式文件指针;同步性(synchronism),主要包括阻塞、非阻塞和分步集合操作;集合性(coordination),主要包括非集合操作和集合操作。下表列出的相应的访问方法(MPI.File 类方法)反应了这些操作特征的组合,其中结合了两种类型的文件指针——独立文件指针和共享文件指针。 文件访问方法 上表中访问文件数据的方法很多,不能在此一一详细介绍,但是它们根据访问文件的特征却有其规律性,下面我们介绍 3 种访问特征的具体含义和数据访问的基本规范: 定位(positioning) MPI 中的文件定位有 3 种:显式偏移(explicit offset)、独立文件指针(individual file pointers)和共享文件指针(shared file pointers),相同进程中可混合使用这 3 种操作方式,彼此无影响。 所有使用显式指针的方法,其命名中都包含 “_at“ 字符,使用显式指针访问数据时,其参数为直接指定的文件偏移位置,而不必再通过任何文件指针,也与文件视图中的相对偏移位置无关。 注意 :这里使用偏移不需要执行 seek 操作。

EC读书笔记系列之17:条款41、42、43、44、45、46

ぃ、小莉子 提交于 2020-01-09 21:08:56
条款 41 了解隐式接口与编译器多态 记住: ★classes和templates都支持接口和多态 ★对classes而言接口是显式的(explicit),以 函数签名 为中心。多态则是通过virtual函数发生于 运行期 ★对templates而言,接口是隐式的(implicit),奠基于 有效表达式 。多态则是通过 template 具现化 和 函数重载解析 发生于 编译期 条款 42 了解 typename 的双重意义 记住: ★声明template参数时,前缀关键字class和typename可互换( 函数模板或类模板均可 !!!) ★请使用关键字typename标识 嵌套从属类型名称 ;但不得在base class lists或成员初始列内以它作为base class修饰符 --------------------------------------------------------------------- template< class T> class Widget; template< typename T> class Widget; 两者是等效的 ---------------------------- 但有时一定得使用typename: template<typename C> void print2nd( const C& container ) {

【C语言笔记】#define与typedef的区别

≡放荡痞女 提交于 2020-01-09 18:53:05
1、#define define是预处理指令,在编译时不进行任何检查,只进行简单的替换 宏定义的一般形式为: #define 宏名 字符串 这里所说的字符串是一般意义上的字符序列,不要和C语言中的字符串等同,它不需要双引号。 2、typedef typedef是在C语言中用来为复杂的声明定义简单的别名,它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。 typedef取别名的一般形式为: typedef 旧名字 新名字 3、define与typedef的区别 (1)#define之后不带分号,typedef之后带分号。 (2)#define可以使用其他类型说明符对宏类型名进行扩展,而 typedef 不能这样做。如: #define INT1 int unsigned INT1 n; //没问题 typedef int INT2; unsigned INT2 n; //有问题 INT1可以使用类型说明符unsigned进行扩展,而INT2不能使用unsigned进行扩展。 (3)在连续定义几个变量的时候,typedef 能够保证定义的所有变量均为同一类型,而 #define 则无法保证。如: #define PINT1 int*; P_INT1 p1,p2; //即int *p1,p2;

寒江独钓(2):串口的过滤

烈酒焚心 提交于 2020-01-09 17:01:31
一、过滤的概念   “过滤”(filter)是极其重要的一个概念。过滤是在不影响上层和下层接口的情况下,在Windows系统内核中加入新的层,从而 不需要修改上层的软件或者下层的真实驱动程序,就加入了新的功能。 二、绑定设备的内核Api之一   通过编程可以生成一个虚拟的设备对象,并“绑定”(Attach)在一个真实的设备上。一旦绑定,则本来操作系统发送给真实设备 的请求,就会首先发送到这个虚拟设备。   在WDK中,有多个内核API能 实现绑定功能 。下面是其中一个函数的原型: NTSTATUSIoAttachDevice(IN PDEVICE_OBJECT SourceDevice,IN PUNICODE_STRING TargetDevice,OUT PDEVICE_OBJECT *AttachedDevice);   IoAttachDevice参数如下:      SourceDevice 是调用者生成的用来过滤的虚拟设备;      TargetDevice 是要被绑定的目标设备。请注意这里的 TargetDevice并不是一个PDEVICE_OBJECT(DEVICE_OBJECT   是设备对象的数据结构,以P开头的是其指针),而是一个字 符串(在驱动开发中字符串用UNICODE_STRING来表示)。实际上,   这个字符串是要被绑定的设备的名字

C++中typedef和define的区别

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-09 16:48:17
typedef和#define的用法与区别 一、typedef的用法 在C/C++ 语言 中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: typedef int INT; typedef int ARRAY[10]; typedef (int*) pINT; typedef可以 增强 程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点。 二、#define的用法 #define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编 译过程中进行,而是在这之前(预处理过程)就已经完成了,但也因此难以 发现 潜在的错误及其它代码维护问题,它的实例像: #define INT int #define TRUE 1 #define Add(a,b) ((a)+(b)); #define Loop_10 for (int i=0; i<10; i++) 在Scott Meyer的Effective C++一书的条款1中有关于#define语句弊端的分析,以及好的替代方法,大家可参看。 三、typedef与#define的区别 从以上的概念便也能基本清楚,typedef只是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),而

[C++]C++面试知识总结

只谈情不闲聊 提交于 2020-01-08 23:40:04
1.程序运行知识 1.1 内存布局和分配方式 C程序的内存布局如下: 静态存储区:存储全局变量和static变量,通常在程序编译期间已经分配好了。 BSS段:存放未初始化的static变量和全局变量 Data段:存放初始化过的static变量和全局变量 Text段:存储程序的二进制代码,程序代码区。   堆:程序运行时通过malloc申请的内存区存放在堆中,需要使用free来释放该内存空间,生存期在malloc和free之间。 栈:执行函数时,函数的局部变量存储在栈中,执行结束后自动释放该内存区域,栈内存分配运算内置与处理器指令集中。 C++程序的内存布局与C程序布局类似,区别是C++不再区分全局变量和静态变量是否已经初始化,全部存储在静态存储区;另外堆中存放new/delete申请释放的资源,而malloc和free申请的资源存放在自由存储区。 1.2 内存溢出原因 栈溢出:越界访问造成,例如局部变量数组越界访问或者函数内局部变量使用过多,超出了操作系统为该进程分配的栈的大小,还有递归函数层次过多超过了栈大小。 堆溢出:程序申请了资源但忘记释放该资源,造成内存泄露,累积泄露内存过多会造成内存溢出。 1.3 内存泄露和检测 C++内存泄漏检测内存泄露是指程序中动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况。 动态内存泄露检测:检查new