关于指针类型?求助?

polarbear2008 2005-08-11 05:19:54
我定义了一个GUID 的变量GUID_HSIC_IFD_02并已赋值.
如果我用&GUID_HSIC_IFD_02,请问返回的类型为什么不是GUID * 型呢?
我在函数调用时必须要用强制转换 (GUID *)GUID_HSIC_IFD_02 才不会报错,否则就会有下行错误:cannot convert from 'const struct _GUID *' to 'struct _GUID *'

求高手指点 ,谢谢!
...全文
150 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
polarbear2008 2005-08-12
  • 打赏
  • 举报
回复
谢谢!
cenlmmx 2005-08-11
  • 打赏
  • 举报
回复
cannot convert from 'const struct _GUID *' to 'struct _GUID *'
这里说的很清楚,你的&GUID_HSIC_IFD_02是const struct _GUID *,所以转换成struct _GUID *.
必须要强制转换,可以用
p=const_cast<struct _GUID *>&GUID_HSIC_IFD_02
polarbear2008 2005-08-11
  • 打赏
  • 举报
回复
谢谢大家热心帮助!
polarbear2008 2005-08-11
  • 打赏
  • 举报
回复
指针变量里存放的不就是所指变量的地址吗?
那么我用 &GUID_HSIC_IFD_02 当实参,不和用指针变量名当实参一样吗?
EarthKing 2005-08-11
  • 打赏
  • 举报
回复
a 是一个GUID类型的对象, 而不是一个const GUID类型对象..

你的GUID_HSIC_IFD_02应该是一个常量吧..
polarbear2008 2005-08-11
  • 打赏
  • 举报
回复
//如果这样改,就是对的,但和上面的不知道差在哪里.
HANDLE op;
GUID a;
a=GUID_HSIC_IFD_02;
GUID *p;
p=&a;

op=GetDeviceViaInterface(p,0);
CloseHandle(op);

oscar_java 2005-08-11
  • 打赏
  • 举报
回复
不一样的,
用&取地址是一个变量的内存地址 例如:printf("%d",&GUID_HSIC_IFD_02); 这样会把变量地址打印出来

用指针是通过这个址址指用变量 例如:printf("%d,*GUID_HSIC_IFD_02); 这是把指针指用的变量打印出来

错误是“不能在'const struct _GUID *'和 'struct _GUID *'之间转换”

变量取地址后返回的就是一个16进制的内存地址
polarbear2008 2005-08-11
  • 打赏
  • 举报
回复
#include <windows.h>
#include "initguid.h"
#include "opendll.h"

DEFINE_GUID(GUID_HSIC_IFD_02,0x33f1cf8c, 0xcff1, 0x4f40, 0x9a, 0x3e, 0xc5, 0xff, 0x3d, 0xbb, 0x11, 0x31);
void main()
{
HANDLE op;
GUID *p;
p=&GUID_HSIC_IFD_02;//此处就提示上述错误。
// 另外,下面调用的那个函数我做了个dll,没有贴在这里。

op=GetDeviceViaInterface(p,0);
CloseHandle(op);
}
EarthKing 2005-08-11
  • 打赏
  • 举报
回复
语法是没有错的, 你把上下文贴出来看一下吧, 错误提示是说你试图将一个"const GUID*"类型转换为"GUID*".
polarbear2008 2005-08-11
  • 打赏
  • 举报
回复
谢谢oscar,另外
我想问问&取地址不和指针的定义等价吗?
&GUID_HSIC_IFD_02 取GUID_HSIC_IFD_02地址,为什么和GUID *GUID_HSIC_IFD_02的作用不一样呢?
那行错误提示究竟是什么意思呢?
变量取地址后返回的类型是和什么有关呢?

oscar_java 2005-08-11
  • 打赏
  • 举报
回复
你定义的GUID_HSIC_IFD_02是一个GUID类型的变量,所以他返回的类型是GUID类型。
而你把他当指针来用,肯定会错!只要你强制转换 (GUID *)GUID_HSIC_IFD_02 才不会报错。
应该把GUID_HSIC_IFD_02定义为:
GUID *GUID_HSIC_IFD_02:
才是指针
1. 如何获取应用程序的实例句柄? 1 2. 如何通过代码获得应用程序主窗口的指针? 1 3.如何在程序中获得其他程序的图标? 1 4.如何编程结束应用程序?如何编程控制windows的重新引导? 1 5.怎样加载其他的应用程序? 2 6. 确定应用程序的路径 2 7. 获得各种目录信息 2 8. 如何自定义消息 2 9. 如何改变窗口的图标? 2 10. 如何改变窗口的缺省风格? 2 11. 如何将窗口居中显示? 3 12. 如何让窗口和 MDI窗口一启动就最大化和最小化? 3 13. 如何使程序保持极小状态? 3 14. 如何限制窗口的大小? 3 15. 如何使窗口不可见? 3 16. 如何使窗口始终在最前方? 3 17、如何创建一个字回绕的CEditView 4 18、通用控件的显示窗口 4 19、移动窗口 4 20、重置窗口的大小 4 21、如何单击除了窗口标题栏以外的区域使窗口移动 4 22、如何改变视窗的背景颜色 5 23、如何改变窗口标题 5 24、如何防止主框窗口在其说明中显示活动的文档名 6 25、如何获取有关窗口正在处理的当前消息的信息 6 26、如何创建一个不规则形状的窗口 6 27、如何在代码中获取工具条和状态条的指针 8 28、如何使能和禁止工具条的工具提示 8 29、如何设置工具条标题 8 30、如何创建和使用无模式对话框 9 31、如何在对话框中显示一个位图 9 32、如何改变对话或窗体视窗的背景颜色 10 33、如何获取一个对话控件的指针 10 34、如何禁止和使能控件 11 35、如何改变控件的字体 11 36、如何在OLE控件中使用OLE_COLOR数据类型 11 37、在不使用通用文件打开对话的情况下如何显示一个文件列表 12 38、为什么旋转按钮控件看起来倒转 12 39为什么旋转按钮控件不能自动地更新它下面的编辑控件 12 40、如何用位图显示下压按钮 12 41、如何一个创建三态下压按钮 12 42、如何动态创建控件 13 43、如何限制编辑框中的准许字符 13 44、如何改变控件的颜色 14 45、当向列表框中添加多个项时如何防止闪烁 15 46、如何向编辑控件中添加文本 15 47、如何访问预定义的GDI对象 15 48、如何获取GDI对象的属性信息 16 49、如何实现一个橡皮区矩形 16 50、如何更新翻转背景颜色的文本 17 51、如何创建一个具有特定点大小的字体 18 52、如何计算一个串的大小 18 53、如何显示旋转文本 19 54、如何正确显示包含标签字符的串 20 55、串太长时如何在其末尾显示一个省略号 20 56、如何快速地格式化一个CString对象 20 57、为什么即使调用EnableMenuItem菜单项后,菜单项还处于禁止状态 20 58、如何给系统菜单添加一个菜单项 21 59、如何确定顶层菜单所占据的菜单行数 21 60、在用户环境中如何确定系统显示元素的颜色 22 61、如何查询和设置系统参数 22 62、如何使用一个预定义的Windows光标 22 63、如何确定当前屏幕分辨率 22 64、如何检索原先的Task Manager应用程序使用的任务列表 22 65、如何确定Windows和Windows系统目录 23 66、在哪儿创建临文件 23 67、如何访问桌面窗口 24 68.VC1.5下如何跳到第一事例? 24 69.关于VC++2.0中使用文件对话框的求助 25 70.如何用VC2.0编写能Edit超过64K的类 25 71.在VC++1.5中如何new一个大数组 25 71A.在VC1.5中,如何得到子窗口在主窗口中的相对坐标? 26 72.VC1.5 如何调用进程? 26 73.VC++1.5编Win3.1程序能否实现全局跳转? 26 74.在DLL用自定义窗口 26 75.如何让TOOLTIP的字体变大 27
一.C语言基础 1.C语言特点(识记); 2.C语言程序基本组成(识记): 3.基本数据类型: 3.1 标识符与基本数据类型(识记), 3.2 常量与变量(领会) 3.3 内存的概念(识记) 4.基本输入、输出函数(领会): 5.运算符与表达式(简单应用): 5.1 运算符的优先级与结合性 二.程序控制结构 1.C语言的语句(识记): 2.顺序结构(领会): 3.分支结构(简单应用): 4.循环结构(综合应用): 5 算法特点 6 流程图 三.构造型数据 1.数组(综合应用): 1.1 定义和引用 1.2 字符数组 1.3 指针和数组 2.结构类型: 2.1 结构类型的概念 2.2 结构类型定义及结构变量说明 2.3 结构变量的初始化 2.4 结构数组的初始化 3.联合类型(识记): 3.1 联合类型的概念 3.2 联合类型定义和联合变量说明 3.3 联合类型的使用 3.4 Struct 和 Union区别 4.枚举型(识记): 4.1 枚举型的定义 4.2 使用枚举型变量 5.typedef的用途(识记): 四.指针 1.指针指针变量(识记): 2.指针运算符(领会): 3. 指针与函数 4.指针数组与指向指针指针(识记): 5.指针与结构(领会): 6. 难点和易混淆 五.函数 1.常见的系统库函数(识记): 2.用户自定义函数(简单应用): 2.1函数定义 2.2 函数调用 2.3 函数声明 2.4 函数返回值 2.5 函数参数 3.函数之间的数据传递(领会): 4.函数的嵌套调用及递归调用(领会): 5.局部变量与全局变量(识记): 6.变量的存储类型与变量的初始化(领会): 7.编译预处理(领会): 六.文件 1.文件的基本概念,C语言中的两种文件(识记) 2.文件的打开、关闭和文件结束测试,文件的读写,文件的定位(识记) 2.1文件操作函数 2.2 文件权限 七.算法与编程(综合应用) 1 使用Turbo C集成开发环境调试程序 1.1.源程序的编写、编辑与改错(领会); 1.2.集成环境下的求助Help(识记); 1.3.程序的编译与目标代码的生成(识记); 1.4.程序的调试(综合应用): 1.5.了解Turbo C程序的常见错误提示(识记)。 2 重点编程题 八 位运算 1. & 2. | 3. ^ 4. ~ 5. << 6. >> ———————————————— 版权声明:本文为CSDN博主「kaikai_sk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/kaikai_sk/article/details/106061539
适合新手的教程,我自己也在学,以下是部分学习笔记 69 函数指针 70 动态内存分配 Dynamic memory pointer = new type pointer = new type [elements] 第一个表达式用来给一个单元素的数据类型分配内存。第二个表达式用来给一个数组分配内存。 例如: int * bobby; bobby = new int [5]; if (bobby == NULL) { // error assigning memory. Take measures. }; delete pointer; delete [ ] pointer; 在C语言中,为了动态分配内存,我们必须求助于函数库stdlib.h 因为该函数库在C++中仍然有效,并且在一些现存的程序仍然使用,所以我们下面将学习一些关于这个函数库中的函数用法。 函数malloc void * malloc (size_t nbytes); char * cp; cp = (char *) malloc (10); int * bobby; bobby = (int *) malloc (5 * sizeof(int)); 这一小段代码将一个指向可存储5个int型整数的内存块的指针赋给bobby,它的实际长度可能是 2,4或更多字节 数,取决于程序是在什么操作系统下被编译的。 int * bobby; bobby = (int *) calloc (5, sizeof(int)); malloc 和calloc的另一点不同在于calloc 会将所有的元素初始化为0。 它被用来改变已经被分配给一个指针的内存的长度。 void * realloc (void * pointer, size_t size); 参数pointer 用来传递一个已经被分配内存的指针或一个空指针,而参数size 用来指明新的内存长度。这个函数 给指针分配size 字节的内存。这个函数可能需要改变内存块的地址以便能够分配足够的内存来满足新的长度要 求。在这种情况下,指针当前所指的内存中的数据内容将会被拷贝到新的地址中,以保证现存数据不会丢失。函 数返回新的指针地址。如果新的内存尺寸不能够被满足,函数将会返回一个空指针,但原来参数中的指针 pointer 及其内容保持不变。 函数 free 这个函数用来释放被前面malloc, calloc 或realloc所分配的内存块。 void free (void * pointer); 注意:这个函数只能被用来释放由函数malloc, calloc 和realloc所分配的空间。 74 数据结构 76-78 结构指针(Pointers to structures) -> 这是一个引用操作符,常与结构或类的指针一起使用,以便引用其中的成员元素,这样就避免使用很多括号。例如,我们用: pmovie->title 来代替: (*pmovie).title 79 自定义数据类型(User defined data types) typedef existing_type new_type_name; typedef char C; typedef unsigned int WORD; typedef char * string_t; typedef char field [50]; 80 联合(Union) union mytypes_t { char c; int i; float f; } mytypes; 81 枚举Enumerations (enum) enum model_name { value1, value2, value3, . . } object_name; 例如,我们可以定义一种新的变量类型叫做color_t 来存储不同的颜色: enum colors_t {black, blue, green, cyan, red, purple, yellow, white}; 注意在这个定义里我们没有使用任何基本数据类型。换句话说,我们创造了一种的新的数据类型,而它并没有基 于任何已存在的数据类型类型color_t,花括号{}中包括了它的所有的可能取值。例如,在定义了colors_t 列举 类型后,我们可以使用以下表达式: 84 类(Class) 类(class)是一种将数据和函数组织在同一个结构里的逻辑方法。定义类的关键字为class ,其功能与C语言中的struct类似,不同之处 是class可以包含函数,而不像struct只能包含数据元素。 类定义的形式是: class class_name { permission_label_1: member1; permission_label_2: member2; ... } object_name; 其中 class_name 是类的名称 (用户自定义的类型) ,而可选项object_name 是一个或几个对象(object)标识。Class的声明体中包含 成员members,成员可以是数据或函数定义,同时也可以包括允许范围标志 permission labels,范围标志可以是以下三个关键字中 任意一个:private:, public: 或 protected:。它们分别代表以下含义: ● private :class的private成员,只有同一个class的其他成员或该class的“friend” class可以访问这些成员。 ● protected :class的protected成员,只有同一个class的其他成员,或该class的“friend” class,或该class的子类(derived classes) 可以访问这些成员。 ● public :class的public成员,任何可以看到这个class的地方都可以访问这些成员。 如果我们在定义一个class成员的时候没有声明其允许范围,这些成员将被默认为 private范围。 以下是怎样读前面例子中出现的一些指针和类操作符 (*, &, ., ->, [ ]): ● *x 读作: pointed by x (由x指向的) ● &x 读作: address of x(x的地址) ● x.y 读作: member y of object x (对象x的成员y) ● (*x).y 读作: member y of object pointed by x(由x指向的对象的成员y) ● x->y 读作: member y of object pointed by x (同上一个等价) ● x[0] 读作: first object pointed by x(由x指向的第一个对象) ● x[1] 读作: second object pointed by x(由x指向的第二个对象) ● x[n] 读作: (n+1)th object pointed by x(由x指向的第n+1个对象) 由关键字struct和union定义的类 类不仅可以用关键字class来定义,也可以用struct或union来定义。 因为在C++中类和数据结构的概念太相似了,所以这两个关键字struct和class的作用几乎是一样的(也就是说在C++中struct定义的 类也可以有成员函数,而不仅仅有数据成员)。两者定义的类的唯一区别在于由class定义的类所有成员的默认访问权限为private,而 struct定义的类所有成员默认访问权限为public。除此之外,两个关键字的作用是相同的。 union的概念与struct和class定义的类不同, 因为union在同一时间只能存储一个数据成员。但是由union定义的类也是可以有成员函 数的。union定义的类访问权限默认为public。 94 操作符重载(Overloading operators) + - * / = < > += -= *= /= << >> <<= >>= == != <= >= ++ -- % & ^ ! | ~ &= ^= |= && || %= [] () new delete 96 this指针 97 静态成员(静态变量、静态函数)(Static members) 静态成员类直接访问,不属于类对象的成员 98 类之间的关系(Relationships between classes) 友元函数(Friend functions) 101 类的继承 记住,this 代表代码正在被执行的这一个对象的指针。 142 函数模块 154 出错处理 (Exception handling) 159 类型转换高级 (Advacned Class Type-casting) 163 typeid 164 预处理指令 168 标准函数库

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧