指针变量

WinCE平台下BMP转JPG代码备份3

安稳与你 提交于 2020-02-17 14:30:15
1 //带参数的保存位图函数 2 BOOL FileOperate::bmpSaveImage(PTSTR pstrFileName, BITMAPFILEHEADER *pbmfh) 3 { 4 BOOL bSuccess ; 5 DWORD dwBytesWritten ; 6 HANDLE hFile; 7 8 hFile = CreateFile ( pstrFileName, GENERIC_WRITE, 0, NULL, 9 CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) ; 10 11 if (hFile == INVALID_HANDLE_VALUE) { 12 return FALSE ; 13 } 14 15 bSuccess = WriteFile (hFile, pbmfh, pbmfh->bfSize, &dwBytesWritten, NULL); 16 17 CloseHandle (hFile) ; 18 19 if (!bSuccess || (dwBytesWritten != pbmfh->bfSize)) { 20 DeleteFile (pstrFileName) ; 21 return FALSE ; 22 } 23 return TRUE ; 24 } 25 26 //**************

C++(七)指针

蓝咒 提交于 2020-02-16 23:16:58
文章目录 一、地址与指针 定义指针及初始化 二级指针 二、指针与数组 字符指针与字符数组 三、指针与动态数组 new 分配内存 delete 释放内存 一、地址与指针 日常生活中我们会问一个人住在哪,比如小明家住在XX省XX市XX县XX镇XX村,这就是其详细住址,也就是地址。 那么在程序中定义的任何变量实际上都是存在内存中的,那么他们的具体位置是多少呢,这里就涉及到了地址。就是这个变量真正存在的位置。 下面我们用代码举个例子,例如定义一个字符: char ch = ‘a’; 我们用vs的监视窗口来看下字符 ch 的地址是多少呢? 那么在使用 cout << ch; 进行输出的时候,cout 也会去从 ch 的地址开始读取一个字符,之后打印输出出来。 变量的地址一般都是比较难记的,例如:0x007f2eab 之类的,那么能不能用专门的一个东西,或者说一种特殊类型的变量来保存这个地址呢?这个特殊类型的变量就是指针。 定义指针及初始化 int* p; //声明了一个指向int类型的指针,就在类型的后面加上一个*,代表是指针类型变量的意思。 但是他没有指向任何变量的地址。 # include "stdafx.h" # include <iostream> using namespace std ; int main ( ) { //定义的时候初始化 int a = 5 ; int *

Linux Device Driver 3rd 下

做~自己de王妃 提交于 2020-02-16 09:34:54
第十一章 内核的数据类型 坚持使用严格的数据类型,并且使用-Wall -Wstrict-prototypes选项编译可以防止大多数的代码缺陷 内核使用的数据类型主要分为三大类: ① 标准C语言类型,类似int ② 类似u32这样有确定大小的类型 ③ 类似pid_t这样用于特定内核对象的类型 使用标准C语言类型 在不同的体系架构上,普通C语言的数据类型所占空间的大小并不相同。 Linux系统中,指针和long整型的大小总是相同的。 为数据项分配确定的空间大小 有时内核代码需要特定大小的数据项,多半是用来匹配预定义的二进制结构或者和用户口空间进行通讯或者通过在结构体中插入"填白 padding"字段 来对齐数据。 当需要知道自己的数据大小时,内核提供了下列数据类型,定义在<asm/types.h>中 ① u8; 无符号字节8位 ② u16; 无符号字 16位 ③ u32; 无符号32位 ④ u64; 无符号64位 相应的有符号类型也存在,只需将名字中的u用s替换就可以了。 接口特定的类型 内核中最常用的数据类型由typedef声明,这样可以防止出现任何移植性问题。 当需要打印一些接口特定的数据类型时,最行之有效的方法就是将其强制转换成可能的最大类型(通常是long或者unsigned long),然后用相应格式。 因为格式和类型相匹配,而且也不会丢失数据位

数组指针和指针数组的区别

半世苍凉 提交于 2020-02-15 23:00:25
数组指针和指针数组的区别 指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针 数组指针:a pointer to an array,即指向数组的指针 int* a[4] 指针数组 表示:数组a中的元素都为int型指针 元素表示:*a[i] *(a[i])是一样的,因为[]优先级高于* int (*a)[4] 数组指针 表示:指向数组a的指针 元素表示:(*a)[i] 注意:在实际应用中,对于指针数组,我们经常这样使用: typedef int* pInt; pInt a[4]; 这跟上面指针数组定义所表达的意思是一样的,只不过采取了类型变换。 代码演示如下: #include <iostream> using namespace std; int main() { int c[4]={1,2,3,4}; int *a[4]; //指针数组 int (*b)[4]; //数组指针 b=&c; //将数组c中元素赋给数组a for(int i=0;i<4;i++) { a[i]=&c[i]; } //输出看下结果 cout<<*a[1]<<endl; //输出2就对 cout<<(*b)[2]<<endl; //输出3就对 return 0; } 注意:定义了数组指针,该指针指向这个数组的首地址,必须给指针指定一个地址,容易犯的错得就是

指针

折月煮酒 提交于 2020-02-15 22:58:28
数组指针和指针数组 每次看到代码中的数组指针或者指针数组都要纠结半天,所以下定决心区分这两个类型。 数组指针 形容词在前,名词在后所以这是一个指向数组的指针。 int (*p)[n]; //优先级()>[]>* 小括号优先级最高,所以这是一个指针,中括号其次所以这是一个数组指针。 指针数组 形容词在前,名词在后所以这是一个值全是指针类型的数组。 定义 int *p[n]; //优先级()>[]>* 中括号优先级大于 ,所以这是一个数组,数组中元素类型是 即指针类型。 指针函数和函数指针 指针函数 指针函数:形容词在前,名词在后所以这是一个返回指针类型的函数 定义:类型标识符 *函数名(参数表) int *f(x,y); //优先级()>[]>* 小括号优先级最高,需要参数,所以这是一个函数,*其次所以这是一个返回指针类型的函数。 函数指针 函数指针:形容词在前,名词在后所以这是一个指向函数的指针类型 定义:类型标识符 (*函数指针变量名)(参数) int (*f) (int x); /*声明一个函数指针 */ 小括号优先级最高,其次是 ,所以先是 f,本质是个指针,所以这是一个指向函数的指针。 来源: https://www.cnblogs.com/wangjian1226/p/11048251.html

C ~ 指针零散记录

南楼画角 提交于 2020-02-15 22:58:06
2016.10.11 一个记录 void MB_float_u16(float f,uint16_t *a,uint16_t *b) { uint8_t *fp; ① uint8_t *ap; ② ap=(uint8_t*)a ③ fp=(uint8_t*)&f; ④ ap[1]=fp[3]; ⑤ ap[0]=fp[2]; ⑥ ap=(uint8_t*)b; ⑦ ap[1]=fp[1]; ⑧ ap[0]=fp[0]; ⑨ } uint8_t *fp = uint8_t fp[] 两者等价 数组没有声明元素个数 则根据数组的使用自动匹配元素个数 32位系统中指针变量都占4个字节 只有在提取数据的时候才按照类型来分配。 fp=(uint8_t*)&f; 这里只是指向相同的地址 和数据 1、2:创建两个指针变量 fp ap 3: ap指向a 因为ap是uint8_t 类型的 所以强制转换 才能赋值 4:相同道理 5:实参 a地址的内容 a[1]等于浮点数 f (占四字节)最后一个字节的内容 6:实参 a地址的内容 a[0]等于浮点数 f 第三个字节的内容 7:将ap指向实参b 8:实参b地址的内容 b[1]等于浮点数 f 第二个字节的内容 9:实参b地址的内容 b[0]等于浮点数 f 第一个字节的内容 2016.10.11 关于结构的一个记录 typedef struct 定义的结构体

线程池理解

久未见 提交于 2020-02-15 19:43:32
Linux 多线程编程之 线程池 的原理和一个简单的C实现,提高对多线程编 程的认知,同步处理等操作,以及如何在实际项目中高效的利用多线程开 发。 1. 线程池介绍 为什么需要线程池??? 目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务 器等都具有一个共同点,就是单位时间内必须处理数目巨大的连接请求, 但处理时间却相对较短。 传统多线程方案中我们采用的服务器模型则是一旦接受到请求之后,即创 建一个新的线程,由该线程执行任务。任务执行完毕后,线程退出,这就 是是“即时创建,即时销毁”的策略。尽管与创建进程相比,创建线程的时 间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执 行次数极其频繁,那么服务器将处于不停的创建线程,销毁线程的状态, 这笔开销将是不可忽略的。 线程池为线程生命周期开销问题和资源不足问题提供了解决方案。通过对 多个任务重用线程,线程创建的开销被分摊到了多个任务上。其好处是, 因为在请求到达时线程已经存在,所以无意中也消除了线程创建所带来的 延迟。这样,就可以立即为请求服务,使应用程序响应更快。而且,通过 适当地调整线程池中的线程数目,也就是当请求的数目超过某个阈值时, 就强制其它任何新到的请求一直等待,直到获得一个线程来处理为止,从 而可以防止资源不足。 2. 线程池结构 2.1 线程池任务结点结构

[c++primer][04]数组和指针

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-15 10:36:16
现代C++程序应尽量使用vector和迭代器类型,而避免使用低级的数组和指针。设计良好的程序只有在强调速度时才在类实现的内部使用数组和指针。 4.1 数组 数组的维数必须用值大于等于1的常量表达式定义。非const变量以及要到运行阶段才知道其值的const变量都不能用于定义数组的维数。 初始化 如果没有显式提供元素初值,数组元素与变量初始化规则一致。 字符串字面值包含一个额外额空字符(null)用于结束字符串 const char ch[6] = “Daniel” ; //error: Daniel is 7 elements  操作 数组下标的正确类型是size_t 4.2 指针的引入 什么是指针 指针保存的是另一个对象的地址,&操作符只能用于左值 初始化 避免使用未初始化的指针 有效的指针或者保存一个特定对象的地址,或者指向某个对象后面的另一个对象,或者是0值(0值表明指针不指向任何对象) 指针也可使用预处理器变量NULL初始化,该变量在stdlib.h中定义,其值为0 void*指针 void*可以保存任何类型对象的地址,不允许使用void*指针操纵它所指向的对象 指针和引用 引用总是指向某个对象,定义引用时没有初始化是错误的; 给引用赋值修改的是该引用所关联的对象的值,引用一经初始化,就始终指向同一特定对象 使用指针访问数组元素 数组名是指向数组第一个元素的指针 C+

c++引用总结

佐手、 提交于 2020-02-15 08:13:59
引用做函数參数 struct Teacher { char name[64]; int age ; }; void printfT(Teacher *pT) { cout<<pT->age<<endl; } //pT是t1的别名 ,相当于改动了t1 void printfT2(Teacher &pT) { //cout<<pT.age<<endl; pT.age = 33; } //pT和t1的是两个不同的变量 void printfT3(Teacher pT) { cout<<pT.age<<endl; pT.age = 45; //仅仅会改动pT变量 ,不会改动t1变量 } void main() { Teacher t1; t1.age = 35; printfT(&t1); printfT2(t1); //pT是t1的别名 printf("t1.age:%d \n", t1.age); //33 printfT3(t1) ;// pT是形參 ,t1 copy一份数据 给pT //---> pT = t1 printf("t1.age:%d \n", t1.age); //35 cout<<"hello..."<<endl; system("pause"); return ; } 引用的本质 struct Teacer { int &a; //4个字节,相似指针 int &b

c语言指针

[亡魂溺海] 提交于 2020-02-15 07:50:02
1.计算机会为变量在存储器中分配空间。 2.局部变量位于栈中。 3.全局变量位于全局变量段。 4.指针只是一个保存“存储器”地址的变量。 5.&运算符可以找到变量的地址。 6.*运算符可以读取存储器地址中的内容 7.*运算符还可以设置存储器地址中的内容 如: int x = 3; int *address = &x; *address中保存的就是x变量的存储地址 通过&提取x的地址,保存在了*address中 #include <stdio.h> int main() { int x = 3; int *address = &x; // 打印结果:一样相等 printf("%p----%p", *address, x); return 0; } 讲解: &运算符用于接收一个数据并获取地址 而 *运算符则是用于接收一个地址并保存数据 c语言中的指针在其他语言中叫法为引用类型,*就算对于地址的解析,生成具体的值 相当于其他语言中的,引用地址的具体值 C语言中声明一个指针变量: 指针变量是什么呢? 答:用来保存内存地址的变量,相当于其他语言的引入地址传给函数假参 声明指针变量: int *名称(或标识符) = &变量; 如: int x = 3; int *address = &x; &提取了变量x的地址并赋值给了address变量,*就是接收地址来表示这是一个指针变量 这时如果你去改变