这段简短的C代码片段做了什么

时间:2010-01-26 15:59:32

标签: c pointers

有人可以解释这段代码的作用吗

size = *(int *)data;        // size of string plus header word
off = (size + 3) & ~3;
chan = *(int *)(data + off);
data[size] = '\0';      // zero terminate

我认为这与将数据设为4的倍数有关?

3 个答案:

答案 0 :(得分:3)

假设datachar* ...

size = *(int *)data;        // size of string plus header word

data被解释为指向int的指针,然后取消引用并分配给size

off = (size + 3) & ~3;

这会将size向上舍入到最接近的4的倍数,并分配给off

chan = *(int *)(data + off);

chan的值显然位于off的{​​{1}}个字节。

data

那是显而易见的。

答案 1 :(得分:1)

此行将data强制转换为指向int的指针,并取消引用指针并将值存储在名为size的变量中:

size = *(int *)data;  

此行获得大于或等于size的四个最小倍数,并将结果赋给变量off

off = (size + 3) & ~3;

此行从指针int获取sizeof(char) * off值偏移data个字节,并将结果存储在chan中:

chan = *(int *)(data + off);

此行为空终止内存块:

data[size] = '\0';

所以看起来size是一块内存块,其中sizeof(int)的{​​{1}}个字节可以被认为是data,表示int记忆块显然,size加上data有有意义的数据。如果不知道sizeof(char) * smallestmultipleoffourlargerthan(size)的详细信息,我们可以说这是最好的。

答案 2 :(得分:0)

在Jason的回答的基础上,看起来这段代码将数据结构的内容分开,其结尾存储在data。存储在那里的数据结构似乎是这样的格式:

{
  int size;
  char data[(size + 3) & ~3];
  int chan;
}