gpt4 book ai didi

C编程中void指针的概念

转载 作者:太空狗 更新时间:2023-10-29 16:14:31 25 4
gpt4 key购买 nike

在 C 编程语言中是否可以在不进行类型转换的情况下取消引用 void 指针?

此外,是否有任何方法可以泛化一个可以接收指针并将其存储在空指针中的函数,并且通过使用该空指针,我们可以创建一个泛化函数吗?

例如:

void abc(void *a, int b)
{
if(b==1)
printf("%d",*(int*)a); // If integer pointer is received
else if(b==2)
printf("%c",*(char*)a); // If character pointer is received
else if(b==3)
printf("%f",*(float*)a); // If float pointer is received
}

我想在不使用 if-else 语句的情况下使这个函数通用 - 这可能吗?

此外,如果有很好的互联网文章解释了空指针的概念,那么如果您能提供 URL 将会很有帮助。

此外,是否可以使用 void 指针进行指针运算?

最佳答案

Is it possible to dereference the void pointer without type-casting in C programming language...

不,void 表示缺少类型,它不是您可以取消引用或分配给它的东西。

is there is any way of generalizing a function which can receive pointer and store it in void pointer and by using that void pointer we can make a generalized function..

您不能仅以可移植的方式取消引用它,因为它可能没有正确对齐。这可能是某些体系结构(如 ARM)的问题,其中指向数据类型的指针必须与数据类型大小的边界对齐(例如,指向 32 位整数的指针必须与 4 字节边界对齐才能取消引用)。

例如,从void*读取uint16_t:

/* may receive wrong value if ptr is not 2-byte aligned */
uint16_t value = *(uint16_t*)ptr;
/* portable way of reading a little-endian value */
uint16_t value = *(uint8_t*)ptr
| ((*((uint8_t*)ptr+1))<<8);

Also, is pointer arithmetic with void pointers possible...

void 的指针无法进行指针运算,因为指针下方缺少具体值,因此缺少大小。

void* p = ...
void *p2 = p + 1; /* what exactly is the size of void?? */

关于C编程中void指针的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/692564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com