由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 求问下面这几行代码是做什么的,非常感谢!
相关主题
用 c 实现的字符串 permutation,求批评指点问个算法题
小公司面经昨天的F家店面
fb面试题【转】FB临门一脚挂了,那种郁闷悔恨的感觉.
大家新年好。 请教一个 c interview question (转载)find k missing numbers in range [0, N].
菜鸟求救 请大家看看我的代码有没有问题Nvidia 的面试
中国人面试果然很好人谁给个方向关于low level implementation
C++ Q: sizeof电面结束,送包子求祝福!
c++ 问题请教一个fb面试问题
相关话题的讨论汇总
话题: ptr话题: int话题: char话题: st话题: buffer
进入JobHunting版参与讨论
1 (共1页)
s****A
发帖数: 80
1
struct ST{
int *ptr;
size_t sz;
};
int main(){
ST* s;
s->sz = 7;
s->ptr = (int *)malloc((s->sz)*sizeof(int));
int allocsize = sizeof(ST) + (s->sz)*sizeof(int);
uint8 * buffer = (uint8 *)malloc(allocsize);
int offset = sizeof(ST);
memcpy(& buffer[offset], s->ptr, s->sz*sizeof(int));
*(int **)&buffer[(char*)&(s->ptr)-(char*)s] = (int *)&buffer[offset];
}
我大概知道好像是要分配一块连续的空间把struct和struct里指针指向的数组内容放在
一起,是这样吗?
但是最后一行code谁能讲一下大概什么意思?
特别是*(int **)&buf[...]和 (char*)&(s->ptr)-(char*)s] 这两个地方能不能解释一
下? 多谢了!
v**********9
发帖数: 42
2
确定这玩意能work吗?
ST* s;
s->sz = 7;
是不是我打开电脑的方式不对?
余下的代码来猜一下。
memcpy(& buffer[offset], s->ptr, s->sz*sizeof(int));
(char*)&(s->ptr)-(char*)s 这个是在计算从地址s->ptr 到地址s相差几个byte. (根
据ST type的声明,应该为0)
*(int**) 应该等同于(int*)。 完全不明白为什么要这么写。
坐等高手指点。
n**********e
发帖数: 88
3
(char*)&(s->ptr) 是 s 中第一个元素的地址。
(char*)s 是 s的地址.
所以, (char*)&(s->ptr) = (char*)s
所以, (char*)&(s->ptr)-(char*)s = 0
所以, buffer[(char*)&(s->ptr)-(char*)s] = buffer[0]
所以,最后一行:
*(int **)&buffer[(char*)&(s->ptr)-(char*)s] = (int *)&buffer[offset];
就是为s->ptr赋值。
s********r
发帖数: 403
4
从上下文看,buffer[(char*)&(s->ptr)-(char*)s] 就是 buffer[0]
但这样做有个好处,就是比较 robust,
一旦以后变成
typedef struct _ST {
void *some_ptr;
int *ptr;
size_t sz;
} ST;
还是可以 work
但可读性不高,不如直接用指针 cast,就一目了然了

【在 s****A 的大作中提到】
: struct ST{
: int *ptr;
: size_t sz;
: };
: int main(){
: ST* s;
: s->sz = 7;
: s->ptr = (int *)malloc((s->sz)*sizeof(int));
: int allocsize = sizeof(ST) + (s->sz)*sizeof(int);
: uint8 * buffer = (uint8 *)malloc(allocsize);

t******g
发帖数: 1667
5
ST* s;
s->sz = 7;
看到这两句还需要往下看吗?
1 (共1页)
进入JobHunting版参与讨论
相关主题
请教一个fb面试问题菜鸟求救 请大家看看我的代码有没有问题
如何用C语言(非C++ JAVA任何其它语言)实现一个统一使用的swap宏中国人面试果然很好人
FG题目包子求教--read4096C++ Q: sizeof
一道 C++ 的题。c++ 问题
用 c 实现的字符串 permutation,求批评指点问个算法题
小公司面经昨天的F家店面
fb面试题【转】FB临门一脚挂了,那种郁闷悔恨的感觉.
大家新年好。 请教一个 c interview question (转载)find k missing numbers in range [0, N].
相关话题的讨论汇总
话题: ptr话题: int话题: char话题: st话题: buffer