关于指针在Windows编程中的一些用法
来源:互联网 发布:淘宝规蜜入口在哪里 编辑:程序博客网 时间:2024/05/19 13:20
在计算机中,地址是一个内存标识符,由一个32位的数据储存。由于C语言提供了32位的数据让我们使用,这就扩展了指针的用途,使它变得更强大。最近在《Windows编程》一书看到一些和指针相关的代码,内容大致如下:
stuct ABOUTBOX_DATA {int iColor;int ifigure;};//主窗口回调函数static ABOUTBOX_DATA ad = {IDC_BLACK,IDC_RECT};// .....DialogBoxParam(hInstance,TEXT("AboutBox"),hwnd,NULL,&ad);//....//对话框回调函数static ABOUTBOX_DATA ad,*pad;pad = (ABOUTBOX_DATA *)lparam;ad = *pad;//over...
////////////////////////////////////////////////
本来对这些消息就很头疼,所以进行了相关的测试。
上面的代码的意图是:把结构体的地址赋给一个32位的数据,因为以前从来没有试过,所以好奇的尝试了一下。
#include <stdio.h>#include <windows.h>struct my{int a;int b;int c;};// 把指针赋值给长整型数据int main(int argc, char const *argv[]){WPARAM wparam;char string[10] = "point!!";my cat = {1,2,3};my *dog = NULL; void *none = NULL;long vary;wparam = (WPARAM)(&cat);vary = (long)(&cat);dog = (my *)vary;printf("cat address : %p\n",&cat);//地址是32位的数据,需要4个字节存储printf("cat address : %p\n",wparam);//WPARAM回调函数的一个参数,实际上也是32位的数据printf("cat address : %p\n",vary);// 只要是32位的数据,就提供了接受地址的可能printf("cat address : %p\n",dog );printf("data : %d %d %d\n",dog->a,dog->b,dog->c);// 输出正常// 事实证明,vary和wparam保存了地址,也可以当作指针使用了!!printf("data : %d %d %d\n",((my*)(vary))->a,((my*)(vary))->b,((my*)(vary))->c);printf("data : %d %d %d\n\n",((my*)(wparam))->a,((my*)(wparam))->b,((my*)(wparam))->c);// 指针就是这么强大,下面给个void类型的指针,其实和上面的是一样的,先把地址弄到手,//再在使用该地址的数据的时候需要进行强制类型转换,因为指针的类型决定了//操作系统从内存取多少数据,如果指针类型是void*,这是没意义的none = (void *)vary;printf("data : %d %d %d\n",((my*)(none))->a,((my*)(none))->b,((my*)(none))->c);// 演示一下字符串vary = (long)(string);printf("%s\n",(char *)string);// 演示一下错误的强制类型转换none = string;printf("%c\n",((int*)none)[0] );/// 输出的是't',这和系统有关。我的电脑中int是printf("int : %d",sizeof(int));//4个字节,char是一个字节,如果int是2个字节,输出的就是'i'printf("char : %d\n",sizeof(char));// 再以int类型为例printf("%d\n",((int*)none)[0] );// 由于int为四个字节,考虑到存储方式,系统直接把"poni"内存的值取出来printf("p : %X \no : %X\ni : %X\nn : %X\n",'p','o','i','n');//用作输出,下面给出字符的值printf("%d\n",0x6e696f70);// 验证一下return 0;}
附上运行结果
////////////////////////////////////////////////
就说这么多吧,就当是记录学习的知识,若有错误之处,望指点~
- 关于指针在Windows编程中的一些用法
- 关于指针的一些用法
- 指针在接口中的用法
- 关于void指针用法的一些疑虑
- 指针及其在C++中的一些应用
- 在Windows中的菜单编程
- 函数指针在类中的用法
- 关于Windows编程的一些心得
- 关于C++中的一些迭代器的用法
- 关于Python中的pip的一些用法
- 关于指针在函数中的调用
- 关于指针在结构体中的调用
- 关于C++中对象指针的一些用法
- STL容器在ACM中的一些用法
- static在C++中的一些用法
- 关于JacORB编程过程中的一些问题
- 关于编程中的无穷大的一些事
- 关于接口在J2EE编程中的小运用及一些体会
- Android的webview加载本地html、assert内html和收集URL
- JAVA String.format 方法使用介绍
- Android菜单的使用和实现
- 深入java虚拟机的笔记
- 心境的修炼之三
- 关于指针在Windows编程中的一些用法
- 心境的修炼之四
- 心境的修炼之五
- 调用startActivityForResult后,onActivityResult无响应的题目
- sshpass这个软件不错
- 心境的修炼之六
- 心境的修炼之七
- 心境的修炼之八
- 使用SQL Server分析服务定位目标用户