Tag: void pointers

在C中使用void *指针的缺点

在C中使用void *有许多缺点(与内存相关,类型相关,效率明智……)。 尽管如此,我们还是使用它们来提供灵活性。 列出使用void * (和C中的首选解决方案 – 如果可能的话)的缺点/缺点。 编辑:请通过以下链接: http : //attractivechaos.wordpress.com/2008/10/02/using-void-in-generic-c-programming-may-be-inefficient/

为什么在这个接口中使用`typedef void * COMPLEX`?

我有一个程序,我无法理解它是如何工作的。 这是它的一部分。 我不明白行typedef void *COMPLEX ,这个命令以及为什么使用struct COMPLEX_IMPL 。 #ifndef _COMPLEX_H #define _COMPLEX_H typedef void *COMPLEX; COMPLEX NewCOMPLEX (double a, double b ); void DeleteCOMPLEX(COMPLEX this ); double GetA (COMPLEX this ); double GetB (COMPLEX this ); COMPLEX AddComplex (COMPLEX c1, COMPLEX c2, COMPLEX res); COMPLEX MultComplex (COMPLEX c1, COMPLEX c2, COMPLEX res); #endif /* _COMPLEX_H […]

C-> C ++在#define中自动将void指针转换为C ++中的Type指针,如果没有给出类型(C风格)

嗨! 我使用了以下C宏,但在C ++中,它无法自动将void*为type* 。 #define MALLOC_SAFE(var, size) { \ var = malloc(size); \ if (!var) goto error; \ } 我知道,我可以这样做: #define MALLOC_SAFE_CPP(var, type, size) { \ var = (type)malloc(size); \ if (!var) goto error; \ } 但我不想重写使用MALLOC_SAFE大部分代码。 有没有办法在没有给宏的类型的情况下这样做? 也许一些MSVC 2005 #pragma / __declspec / other? ps:我不能使用C编译器,因为我的代码是大项目的一部分(数百个模块之一)。 而现在它是在C ++上。 我知道,我可以单独构建我的代码。 但这是旧代码,我只是想快速移植它。 问题是关于void * cast;)如果不可能,我只需用MACRO_SAFE_CPP替换MACRO_SAFE 谢谢!

什么时候uintptr_t比intptr_t更受欢迎?

鉴于我需要在结构中存储“generics”指针的值并且对指向的内存本身没有兴趣,我发现将它存储为intptr_t不是void*语义上更正确。 问题是uintptr_t是否更适合,并且当一个人比另一个更优先时?

如何在C中将void指针转换为char指针

好吧,这对我来说太麻烦了。 我只是不知道这个任务有什么问题: void *pa; void *pb; char *ptemp; char *ptemp2; ptemp = (char *)pa; ptemp2 = (char *)pb; 任何人都可以告诉我为什么我收到此错误: 错误:从’void *’到’char *’的无效转换

在C中打印void *变量

大家好我想用printf进行调试。 但我不知道如何打印“out”变量。 在返回之前,我想打印此值,但其类型为void *。 int hexstr2raw(char *in, void *out) { char c; uint32_t i = 0; uint8_t *b = (uint8_t*) out; while ((c = in[i]) != ‘\0’) { uint8_t v; if (c >= ‘0’ && c = ‘A’ && c = ‘a’ || c <= 'f') { v = 10 + c – 'a'; } […]

c:空隙大小*

我对C中的void *指针有点困惑。特别是在读完这个问题之后: sizeof(某些指针)是否总是等于4? ,一个人说没有保证sizeof(int *)== sizeof(double *) 我的问题是:是否有sizeof(void *)> = sizeof(任何其他指针类型)的保证? 换句话说,我是否可以始终为void *指针分配some_type *指针,然后将其作为some_type *返回?

Objective-C变量……指向自己?

我在Apple的一些示例代码中发现了这个构造,用于处理键值观察。 添加观察者时,可以添加唯一标识KVO调用的上下文(以void *变量的forms) – 如果您希望多个KVO调用触发相同的操作,则特别有用,因为单个上下文可以避免使用一堆链式或语句来检查所有可能性。 这是用于声明用于上下文的变量的行: static void *aContext = &aContext; 它基本上声明了一个引用自身的aContext,为自己分配了自己的内存位置 – 这是一个为KVO上下文创建唯一标识符的绝妙技巧。 除了细节之外,我很好奇这究竟叫做什么(自我指定?圆形指针?还有什么?)以及它除了KVO之外还有什么用处。 我尝试使用谷歌搜索不同的东西,但我无法想出任何完全相同的东西,缺乏适当的术语。 🙂 我肯定会经常使用这个技巧,因为它减少了KVO处理所需的if语句数量,这使它更加优雅。

如果我有一个void指针,我该如何将int放入其中?

我有一个任意值的数组,所以我将它定义为一个void指针数组,所以我可以指向任何类型的信息(如int ,字符数组等)。 但是,我如何实际为其分配一个int ? 以这些初始化为例: void* data[10]; int x = 100; 我的直觉会想到这一点,但这会产生编译错误: data[0] = malloc(sizeof(int)); *(data[0]) = x; 我还想过使用&x ,但我会取一个局部变量的地址,这个(据我所知)将在退出程序后被清除。 所以,如果我有一个局部变量x ,我怎样才能正确地将它变为void指针类型的变量?

打印无效指针的位

如果我创建一个void指针,并将一段内存malloc到该void指针,那么如何打印出我刚刚分配的各个位? 例如: void * p; p = malloc(24); printf(“0x%x\n”, (int *)p); 我想上面打印我刚刚分配的24位。