user-0 提问: void *一级指针和int **二级指针可以相互转换吗？

回复:
user: user-1
content: 引用 10 楼 lin5161678 的回复:int 转char  只要 int 的值能用char 表示 就保证正确  int 占用多大内存 char 占用多大内存 都无所谓  只和 int 内容有关系  两个指针 之间能不能转换  和两个指针是不是 都是 32bit 没关系  你自己强调 不代表安全 估计你也知道  就算都是 32bit 的指针 有时候 转换结果一样不保证有意义  这里可以转换的原因是 void* 本身可以转换成任意对象类型指针  和 void* 占用多大内存没关系  你说跟void*占用多大内存没有关系,  我只举一个例子,  假设(虽然不可能这么设计)    void*是1个字节,  int*是4个字节 还能任意转换吗? 任意转换的基础就是信息不丢失 为什么语法只支持隐式的  任意指针类型转换成void*, 而不支持void*转换成任意指针类型,   就是因为指针本身占用字节相同, 可以保证任意指针类型可以转换为void*,   但void*不能安全地自动地转换成其它类型指针所以需要 程序员  自己来保证, 就只能强制转换.  如果你觉得这还是说的错的.  那我也没办法反驳了, 自己理解就行了.

user: user-2
content: 可以互换。不同类型的指针只不过是对内存取值和移动的类型不同，但终究是内存。只要搞明白内存里面存储的是什么怎么转都行。

user: user-3
content: 这个应该是可以转的。

user: user-4
content: 引用 11 楼 xiaohuh421 的回复:[quote=引用 10 楼 lin5161678 的回复:]  int 转char  只要 int 的值能用char 表示 就保证正确  int 占用多大内存 char 占用多大内存 都无所谓  只和 int 内容有关系  两个指针 之间能不能转换  和两个指针是不是 都是 32bit 没关系  你自己强调 不代表安全 估计你也知道  就算都是 32bit 的指针 有时候 转换结果一样不保证有意义  这里可以转换的原因是 void* 本身可以转换成任意对象类型指针  和 void* 占用多大内存没关系  你说跟void*占用多大内存没有关系,  我只举一个例子,  假设(虽然不可能这么设计)    void*是1个字节,  int*是4个字节 还能任意转换吗? 任意转换的基础就是信息不丢失 为什么语法只支持隐式的  任意指针类型转换成void*, 而不支持void*转换成任意指针类型,   就是因为指针本身占用字节相同, 可以保证任意指针类型可以转换为void*,   但void*不能安全地自动地转换成其它类型指针所以需要 程序员  自己来保证, 就只能强制转换.  如果你觉得这还是说的错的.  那我也没办法反驳了, 自己理解就行了.[/quote] 你弄错因果关系 所以会举出一个这样错误的例子   弄明白一点 标准要求 任意对象指针都可以转换为 void* 并转换回来之后保持原样   根据这个要求 编译器在实现的时候 一般会让void* 和 其他对象指针内存大小保持一致  你所说的极端情况不可能出现  要出现也只能是 int* 4个字节 void* 8个字节这种情况

user: user-4
content: 引用 4 楼 tajon1226 的回复:[quote=引用 1 楼 hdt 的回复:] 试一下不就知道了吗？  32位指针的本质所占内存大小一样，为什么不能转？[/quote] 能不能转 和 占用内存大小没有一分钱关系 char 和 int 占用内存大小不一样不也能转

user: user-5
content: 引用 4 楼 tajon1226 的回复:[quote=引用 1 楼 hdt 的回复:] 试一下不就知道了吗？ 32位指针的本质所占内存大小一样，为什么不能转？[/quote] 我既没有说能转，也没有说不能！ 你语言能力难道有问题？ 我只是让你自己去试，至于能不能试过不就知道了？

user: user-4
content: 引用 9 楼 xiaohuh421 的回复:[quote=引用 8 楼 lin5161678 的回复:] 能不能转 和 占用内存大小没有一分钱关系 char 和 int 占用内存大小不一样不也能转  如果要保证正确的话, 还是有关系的哟. 比如你说的char和int能转,  如果int转char, 要保证正确不丢失数据, 那就不行了.  因为占用内存大小不同.  指针的话, 因为不管是32位还是64位系统, 指针变量都是占用相同的位数, 比如32位系统, 指针都是4个字节.  那么任意两个指针之间就能不丢失数据的相互转换.  (注意: 这里只说数据是否丢失, 并不代表安全)  所以楼主的说问题, 可以肯定的回答, 是可以转换的.  不管你是三级, 四级,五级..... 类型如何. 只是说可能需要使用显式的转换, 也就是强制转换.[/quote]  引用 9 楼 xiaohuh421 的回复:[quote=引用 8 楼 lin5161678 的回复:] 能不能转 和 占用内存大小没有一分钱关系 char 和 int 占用内存大小不一样不也能转  如果要保证正确的话, 还是有关系的哟. 比如你说的char和int能转,  如果int转char, 要保证正确不丢失数据, 那就不行了.  因为占用内存大小不同.  指针的话, 因为不管是32位还是64位系统, 指针变量都是占用相同的位数, 比如32位系统, 指针都是4个字节.  那么任意两个指针之间就能不丢失数据的相互转换.  (注意: 这里只说数据是否丢失, 并不代表安全)  所以楼主的说问题, 可以肯定的回答, 是可以转换的.  不管你是三级, 四级,五级..... 类型如何. 只是说可能需要使用显式的转换, 也就是强制转换.[/quote] int 转char  只要 int 的值能用char 表示 就保证正确  int 占用多大内存 char 占用多大内存 都无所谓  只和 int 内容有关系  两个指针 之间能不能转换  和两个指针是不是 都是 32bit 没关系  你自己强调 不代表安全 估计你也知道  就算都是 32bit 的指针 有时候 转换结果一样不保证有意义  这里可以转换的原因是 void* 本身可以转换成任意对象类型指针  和 void* 占用多大内存没关系

user: user-1
content: 引用 8 楼 lin5161678 的回复:能不能转 和 占用内存大小没有一分钱关系 char 和 int 占用内存大小不一样不也能转  如果要保证正确的话, 还是有关系的哟. 比如你说的char和int能转,  如果int转char, 要保证正确不丢失数据, 那就不行了.  因为占用内存大小不同.  指针的话, 因为不管是32位还是64位系统, 指针变量都是占用相同的位数, 比如32位系统, 指针都是4个字节.  那么任意两个指针之间就能不丢失数据的相互转换.  (注意: 这里只说数据是否丢失, 并不代表安全)  所以楼主的说问题, 可以肯定的回答, 是可以转换的.  不管你是三级, 四级,五级..... 类型如何. 只是说可能需要使用显式的转换, 也就是强制转换.

user: user-4
content: 可以  void* 可以和任何对象指针相互转换

user: user-5
content: 试一下不就知道了吗？

user: user-6
content: 可以的，还可以把它转成unsigned int来回传

user: user-7
content: 电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-8
content: 引用 1 楼 hdt 的回复:试一下不就知道了吗？  32位指针的本质所占内存大小一样，为什么不能转？

user: user-9
content: 如果显示转换都可以  隐式的话C++只能由int**转换为void*