我正在开发OpenGL的软件实现,而OpenGL似乎要求我返回32位指针。为了节省时间,我将其放入64位系统的C语言map中,以便从32位伪地址中检索64位指针。但是,在32位系统上,这会造成麻烦,因此我应该逐字使用指针。
这基本上是我要在共享标头中执行的操作:
#if <64-bit>
#include <search.h>
extern void * pointerTable;
typedef struct {
int key;
void* value;
} intPtrMap;
inline int compar(const void *l, const void *r) {
const intPtrMap *lm = l;
const intPtrMap *lr = r;
return lm->key - lr->key;
}
inline uint32_t allocate(size) {
void* result = malloc(size);
intPtrMap *a = malloc(sizeof(intStrMap));
a->key = (uint32_t) result;
a->value = result;
tsearch(a, &pointerTable, compar);
return (uint32_t) result;
}
inline int getPtr(ptr) {
intPtrMap *find_a = malloc(sizeof(intPtrMap));
find_a->key = ptr; …Run Code Online (Sandbox Code Playgroud) 我有一些关于sizeof运算符的情况,它与函数类型一起使用.
案例1: [现场演示]
#include <stdio.h>
char func()
{
printf("sizeof func = %zu\n", sizeof(func())); //Ok. Output : 1
return 0;
}
int main(void)
{
func();
}
Run Code Online (Sandbox Code Playgroud)
是sizeof(func())用C有效吗?
案例2: [现场演示]
printf("sizeof func = %zu\n", sizeof(&func())); // error
Run Code Online (Sandbox Code Playgroud)
它不起作用.编译器给出错误.为什么?
案例3: [现场演示]
printf("sizeof func = %zu\n", sizeof(&func)); //Ok. Output : 8
Run Code Online (Sandbox Code Playgroud)
在这里,sizeof(&func)等于指针的大小?
这里,案例3工作正常,其中案例2给出错误.为什么?
今天我了解到函数指针和数据指针不一样,因此彼此不兼容(为什么函数指针和数据指针在C/C++中不兼容?).然而,我的问题是,不同的函数(非成员)指针是否相互兼容(以相同的方式实现).
在代码中:
typedef void(*FuncPtr0)();
typedef void(*FuncPtr1)(int);
FuncPtr0 p0;
FuncPtr1 p1;
p0 = reinterpret_cast<FuncPtr0>(p1); // will this always work, if p1 really
p0(); // points to a function of type FuncPtr0
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
如何找到“指针”类型的大小?例如,如果我想知道整数的大小,我可以使用“sizeof(int)”。指针相当于什么?是否可以在不初始化指针的情况下执行此操作?