(struct in_addr **)和之间有什么区别*(struct in_addr *)?请用一个例子清楚解释.
表达(struct in_addr **)是铸造的东西指针的指针struct in_addr.
表达*(struct in_addr *)蒙上东西,一个指向struct in_addr,以及解引用该指针.
示例:假设您有一个带有void指针的函数,即它可以获取指向任何内容的指针,并且您知道它实际上是指向其他内容的指针,您可以将该指针强制转换为正确的指针类型:
void some_fun(void *ptr)
{
/* I know that `ptr` is really a pointer to a pointer to a `struct in_addr` */
/* In other words, an array of pointers to `struct in_addr` */
struct in_addr **addresses = (struct in_addr **) ptr;
/* Do something with the array of pointers in `addresses` */
}
Run Code Online (Sandbox Code Playgroud)
其他示例:如果您有另一个也接受指针的函数void,但是您知道它指向a struct in_addr,并且您希望在不使用指针访问的情况下将其转换为普通结构:
void some_other_fun(void *ptr)
{
/* I know that `ptr` is really a pointer to a `struct in_addr` */
/* Copy the data from that structure into my own structure */
struct in_addr addr = *(struct in_addr *) ptr;
/* Use `addr`... */
}
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,您告诉编译器一种类型的指针实际上是一种不同类型的指针.
在第二个示例中,首先告诉编译器指针是不同类型的指针((struct in_addr *)部件),然后取消引用该指针以获取具有一元运算*符的实际结构.
请注意,这里使用的铸件是旧的C型铸造.在C++中,您可以使用eg reinterpret_cast,例如:
in_addr** addresses = reinterpret_cast<in_addr**>(ptr);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |