[英]C Casting from pointer to uint32_t to a pointer to a union containing uint32_t
[英]C casting from uint32_t* to void *
我有一个关于C.的指针转换的问题
如果我有这个签名的功能:
uint8_t input_getc(void)
从STDIN读取用户输入。
然后我有一个指针
void* buffer
我存储了input_getc()
中的返回值。什么是正确的方法来转换它?
//read user input
for(i = 0; i < SIZE; ++i)
{
uint8_t temp = input_getc();
//copy to void* buffer
*(uint8_t *)(buffer + i) = temp //WAY #1
*(buffer + i) = (void *)temp; //WAY #2
}
这些都是一样的吗?
谢谢
就像现在一样,这些方法都不会编译。 由于buffer
是一个void*
,因为它具有未知的大小,所以不能对其进行算术运算。
目前还不完全清楚你要在哪里存储它。 如果您只是尝试将uint8_t
存储到buffer
i
指向的内存位置,那么可以这样做:
((uint8_t*)buffer)[i] = temp;
编辑:
好吧,显然在C中允许对void*
算术,但在C ++中则不允许。 但是,这样做仍然被认为是不安全的行为。
看到这个问题: C中的空指针的指针算法
一种方法是:
*(((uint8_t*)buffer)+i) = temp;
我不明白你是什么意思
copying to `void* buffer`
但如果你正在做以下事情,那么way1是对的
int main()
{
int i;
char a[10];
void *buffer;
buffer = &a; // buffer is void* type pointer and its pointing to some buffer then
for(i = 0; i < 10; ++i)
{
uint8_t temp = 65;
//copy to void* buffer
*(uint8_t *)(buffer + i) = temp; //WAY #1
}
printf("\n %s",a);
}
大编辑:
在WAY1
你正在添加+ i offcet with void * buffer并且仍然整个结果是无效的*然后你用uint8_t *对整个结果进行类型转换然后访问该值以便它可以工作
但在方式2你添加+ i offcet与void *缓冲区仍然整个结果是无效*然后你正在访问该值... 这是完全错误..你会收到警告/错误在这里
warning: dereferencing ‘void *’ pointer
还有一个编辑:
你不能解除引用void *指针,但你可以用指针值(而不是它的pointe值)进行算术运算
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.