它有什么作用*((T**)m_ptr)?
what does it do *((T**)m_ptr)?
>我在代码中看到了这一点,但无法理解这里发生了什么:
T * ptr; // we have some pointer and it has proper adress
...
// Later I see this and I can't understand what is going here
ptr = *((T **)ptr);
另外,在稍后的代码中,我看到*((T**)ptr) = m_address;
这种结构使用什么?*((T**)ptr)
谢谢!
这意味着作者希望他们写T** ptr
,并且正在通过将指针转换为与声明它不同的类型来绕过他们没有编写的事实,然后再取消引用它。它假装ptr
指向T**
而不是T*
。
在某些情况下,这种类型的双关语是可以的(例如,它通常与struct sockaddr
类型一起使用以实现多态性),但是类型双关语T*
T**
是非常奇怪的。
事实上,除非T
是char
,或者T
有一个T*
作为它的第一个成员并且没有填充,否则它也是一种代码异味(据我所知,UB)。
避免。
相关文章:
- 对于没有功能的结构,"new (ptr) mystruct;"做什么?
- "[ptr, ptr+len) must be a valid range"是什么意思?
- 这个陈述'p = I.ptr<uchar>(i);有什么作用?
- 这是什么意思 *ptr = len
- 删除PTR C 后会发生什么
- 在C++中,对象什么时候真正被销毁?delete(ptr)做什么
- C++中的大小释放:全局运算符delete的正确行为是什么(void*ptr,std::size_t size)
- 这个声明"int(*ptr[3])();"是什么意思?
- (PTR + n-1) & -n 这个表达式有什么作用?
- (ptr + i)->Func() 和 &ptr[i] 之间有什么区别吗?Func()
- 如果您使一个char*ptr存储整数变量的地址,会发生什么
- 当使用运算符 new 更改为其他内存的指向已分配内存的 ptr 时会发生什么
- *ptr 和 * ptr 有什么区别
- (ptr语言 - A[0]) / (sizeof(A[0]) / sizeof(A[0][0]))的类型是什么?< /
- 这个语句表示什么[func ptr]
- 使用auto_ptr时,*ptr 和 *ptr.get() 有什么区别
- 在链表中设置head等于Node* ptr意味着什么?
- "(void)!ptr"做什么?
- 'Bad Ptr'在视觉C++中是什么意思?
- 这"int logprintf( const char* ptr, ... )"做什么?