C 带空指针的指针算法
我想知道是否有更好的方法来代替将空指针强制转换为C 带空指针的指针算法,c,pointers,C,Pointers,我想知道是否有更好的方法来代替将空指针强制转换为uint8\u t,然后根据偏移量进行算术,然后将其强制转换为uint32\u t,然后取消引用以获得精确偏移量处的4字节值 void * foo = malloc(1024); uint32_t myVar; for(int i = 0; i < 10; i++) { myVar = *((uint32_t*)((uint8_t *) foo + nOffset)); nOffset += 100; } void*foo=mal
uint8\u t
,然后根据偏移量进行算术,然后将其强制转换为uint32\u t
,然后取消引用以获得精确偏移量处的4字节值
void * foo = malloc(1024);
uint32_t myVar;
for(int i = 0; i < 10; i++)
{
myVar = *((uint32_t*)((uint8_t *) foo + nOffset));
nOffset += 100;
}
void*foo=malloc(1024);
uint32_t myVar;
对于(int i=0;i<10;i++)
{
myVar=*((uint32_t*)((uint8_t*)foo+nOffset));
nOffset+=100;
}
您最好只停留在指针算法的一个“域”内
你应该这样做
uint32_t*foo=malloc(1024)
然后要么
myVar = foo + nOffset / sizeof(*foo);
nOffset += 100;
或
用于在每一步前进100字节。非主题:
i<10
比这里的i>10
更有意义。要稍微改进,请使用char
而不是uint8\t
。这里关注的不是位宽度,而是指针的元素大小sizeof(char)
根据定义是1。@luserdroog除非数据实际上是字符,否则使用uint8\t
更有意义。虽然它在几乎所有现代平台上都没有区别,但将其作为通用的uint8\t
在阅读代码时会给出一些语义提示。@JoachimPileborg。我担心的正是这些语义暗示。它(对我)没有任何实际意义。我只是盯着它看,想知道为什么它不是char
。既然代码通常都有未定义的行为,那么到底哪种未定义的行为看起来最漂亮,真的值得探讨吗?
myVar = foo + nOffset;
nOffset += 100 / sizeof(*foo);