我有一个名为的void指针ptr
.我想将这个值增加几个字节.有没有办法做到这一点?
请注意,我想在不创建任何更多变量的情况下就地执行此操作.
我能做点什么ptr = (void *)(++((char *) ptr));
吗?
Jam*_*lis 62
您无法对void指针执行算术运算,因为指针算术是根据指向对象的大小定义的.
但是,您可以将指针强制转换为a char*
,对该指针进行算术运算,然后将其转换回void*
:
void* p = /* get a pointer somehow */;
// In C++:
p = static_cast<char*>(p) + 1;
// In C:
p = (char*)p + 1;
Run Code Online (Sandbox Code Playgroud)
Alo*_*ave 19
void
指针上不能进行任何算术运算.
编译器不知道void
指针指向的项的大小.您可以将指针强制转换为(char *
)来执行此操作.
在GCC有它把一个的大小的扩展void
为1
.所以可以在a void*
上使用arithematic 来以字节为单位添加偏移量,但是使用它会产生不可移植的代码.
只是增加void*
确实发生在gcc中工作:
#include <stdlib.h>
#include <stdio.h>
int main() {
int i[] = { 23, 42 };
void* a = &i;
void* b = a + 4;
printf("%i\n", *((int*)b));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不过,从概念上(和正式地)来说,这是错误的,因此您需要使其明确:将其投射char*
并返回。
void* a = get_me_a_pointer();
void* b = (void*)((char*)a + some_number);
Run Code Online (Sandbox Code Playgroud)
很明显,您要增加一定数量的字节。
归档时间: |
|
查看次数: |
52049 次 |
最近记录: |