Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 带空指针的指针算法_C_Pointers - Fatal编程技术网

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);