void-pointers相关内容

在 Julia 中声明 C void 指针的正确方法

好吧,我最初把这个问题的表述搞砸了(自从我认真编写 C++ 代码以来已经一年多了,而且我对纯 C 的经验非常有限),所以让我们再试一次. 编写一些 C 代码是为了期望您执行以下操作 void* p;create_new_thing(&p);//p 现在是一个新事物do_stuff_to_thing(p);//p发生了什么事 我的问题是如何在 Julia 中创建对象 p.现在我相信答案是 ..
发布时间:2022-01-23 19:25:00 其他开发

当 sizeof(char) != 1 时 C 中的字节精度指针算术

如何以单字节精度便携地执行指针运算? 请记住: char 在所有平台上都不是 1 字节 sizeof(void) == 1 仅在 GCC 中作为扩展提供 虽然某些平台可能有指针 deref 指针对齐限制,但算术可能仍需要比最小基本 POD 类型的大小更精细的粒度 解决方案 您的假设是有缺陷的 - sizeof(char) 被定义 为 1. 来自 C99 标准 (TC3 ..

找出 C++ 空指针的类型

我有一个小问题:如何找出 C++ 指针的类型? 我经常在我的控制台程序中使用一个小函数来收集输入,它看起来像这样: void query(string what-to-ask, [insert datatype here] * input) 我想创建一个通用表单,使用一个空指针,但我不能创建一个空指针,那么我如何找出它的类型以便我可以转换它? 解决方案 你不能. 然而,一种 ..
发布时间:2021-12-31 22:06:54 C/C++开发

转换为 void* 并返回 Original_Data_Type*

我多次看到并使用了C++,特别是在各种线程实现中.我想知道这样做是否有任何陷阱/问题?当我们强制转换为 void* 并再次返回时,有什么方法可能会遇到错误或未定义的条件吗?如果有这些问题,我们应该如何解决? 谢谢. 解决方案 我想知道这样做是否有任何陷阱/问题? 在将 void* 转换回特定类型时,您需要绝对确定,否则,您最终会遇到 未定义行为 和潜在的灾难.一旦你使用vo ..
发布时间:2021-12-31 22:03:28 C/C++开发

多重继承:从 void * 转换到第二个基类后的意外结果

我的程序需要使用void*来在动态调用的情况下传输数据或对象,以便它可以引用任意类型的数据,甚至是原始类型的数据.但是,我最近发现在具有多个基类的类的情况下向下转换这些 void* 的过程失败,甚至在调用这些向下转换的指针上的方法后使我的程序崩溃,即使内存地址似乎是正确的.崩溃发生在访问“vtable"期间. 所以我创建了一个小测试用例,环境是Mac OS X上的gcc 4.2: 类形状{ ..
发布时间:2021-12-31 21:47:04 C/C++开发

如何将整数转换为空指针?

在 C 中使用线程时,我面临警告 “警告:从不同大小的整数转换为指针" 代码如下 #include#include#include#include无效*打印(无效*id){int a=10;printf("我的线程id是%ld\n",pthread_self());printf("线程 %d 正在执行\n",id);返回(空*)42;}int main(){pthread_t th[ ..
发布时间:2021-12-31 21:44:41 其他开发

通过 void* 进行转换,而不是使用 reinterpret_cast

我正在读一本书,我发现不应该直接使用 reinterpret_cast,而是将转换为 void* 与 static_cast 结合使用: T1 * p1=...无效 *pv=p1;T2*p2=static_cast(pv); 代替: T1 * p1=...T2*p2=reinterpret_cast(p1); 然而,我找不到解释为什么这比直接演员更好.如果有人能给我一个解释或指出我的答案, ..

错误:从“void*"转换为“int"失去精度

我有一个原型为 void* myFcn(void* arg) 的函数,它用作 pthread 的起点.我需要将参数转换为 int 以备后用: int x = (int)arg; 编译器(GCC 4.2.4 版)返回错误: file.cpp:233: 错误:从“void*"转换为“int"失去精度 投射这个的正确方法是什么? 解决方案 您可以将其转换为 intptr_t 类型.它是一 ..
发布时间:2021-12-31 21:34:10 C/C++开发

"void *(*)(void *)"是什么意思在 C++ 中是什么意思?

它是pthread_create()中的参数.我认为每个部分的意思是: void *:返回值是一个void指针. (*):它是一个函数指针. (void *):它接受一个无类型指针作为参数. 正确吗? 解决方案 是,它是一个无名函数指针的签名,它接受并返回void *. 如果它有一个名字(如在一个变量中)它会是: void *(*myFuncName)(vo ..
发布时间:2021-12-13 13:26:18 C/C++开发

C 没那么难: void ( *( *f[] ) () ) ()

我今天刚看到一张图片,我想我会很感激的解释.所以这是图片: 我发现这令人困惑,并想知道这些代码是否实用.我用谷歌搜索了这张图片,并在 this reddit 条目中找到了另一张图片,这是那张照片: 所以这种“螺旋式阅读"是有效的吗?这是 C 编译器的解析方式吗? 如果对这个奇怪的代码有更简单的解释,那就太好了. 除此之外,这些代码有用吗?如果有,在何时何地? 有一个一个问题 ..
发布时间:2021-12-12 23:47:17 其他开发

Objective-C:id 和 void * 之间的区别

id 和 void * 有什么区别? 解决方案 void * 的意思是“对一些随机内存块的引用,其中包含无类型/未知内容" id 表示“对未知类的某个随机 Objective-C 对象的引用" 还有其他语义差异: 在 GC Only 或 GC Supported 模式下,编译器将为 id 类型的引用发出写屏障,但不会为 void * 类型的引用发出写屏障.在声明结构时,这 ..
发布时间:2021-12-02 18:05:48 移动开发

C中void指针的指针算法

当一个指向特定类型(比如 int, char, float, ..)的指针增加时,它的值增加该数据类型的大小.如果指向x 大小数据的void 指针递增,它如何指向x 字节前面?编译器如何知道将 x 添加到指针的值? 解决方案 最终结论:void* 上的算术在 C 和 C++ 中都是非法. GCC 允许它作为扩展,参见 算术上void- 和函数指针(注意本节是手册“C 扩展"一章的一部 ..
发布时间:2021-12-01 23:51:40 其他开发

使用 intptr_t 而不是 void*?

使用 intptr_t 作为通用存储(保存指针和整数值)而不是 void* 是个好主意吗?(如下所示:http://www.crystalspace3d.org/docs/online/manual/Api1_005f0-64_002dBit-Portability-Changes.html) 对于我已经阅读的内容: int -> void* -> int 往返不保证保持原始值;我猜 ..
发布时间:2021-11-26 14:36:12 其他开发

使用 intptr_t 而不是 void*?

使用 intptr_t 作为通用存储(保存指针和整数值)而不是 void* 是个好主意吗?(如下所示:http://www.crystalspace3d.org/docs/online/manual/Api1_005f0-64_002dBit-Portability-Changes.html) 对于我已经阅读的内容: int -> void* -> int 往返不保证保持原始值;我猜 ..
发布时间:2021-11-24 23:24:18 C#