Hun*_*len 4 c pointers function-pointers
我有一个关于C.的指针转换的问题
如果我有这个签名的功能:
uint8_t input_getc(void)
从STDIN读取用户输入.
然后我有一个指针
void* buffer
我存储来自input_getc()in的返回值.什么是正确的方法来投射它?
//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
}
Run Code Online (Sandbox Code Playgroud)
这些都是一样的吗?
谢谢
就像现在一样,这些方法都不会编译.因为它buffer是一个void*你不能做算术,因为它有一个未知的大小.
目前还不完全清楚你要在哪里存储它.如果你只是想把它存储uint8_t到buffer带有offset 的内存位置i,那么就可以这样做:
((uint8_t*)buffer)[i] = temp;
Run Code Online (Sandbox Code Playgroud)
编辑:
好吧,显然void*在C中允许算术运算,但在C++中则不行.但是,这样做仍然被认为是不安全的行为.
看到这个问题:C中的空指针的指针算法