gpt4 book ai didi

c++ - (struct in_addr **) 和 *(struct in_addr *) 之间的区别

转载 作者:行者123 更新时间:2023-11-30 20:45:30 26 4
gpt4 key购买 nike

(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` */
}

其他示例:如果您有另一个函数也采用指向 void 的指针,但您知道它指向 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`... */
}

在第一个示例中,您告诉编译器一种类型的指针实际上是不同类型的指针。

在第二个示例中,您首先告诉编译器该指针是不同类型的指针((struct in_addr *) 部分),然后 您取消引用该指针以使用一元 * 运算符获取实际结构。

<小时/>

请注意,这里使用的类型转换是旧的 C 风格类型转换。在 C++ 中你会使用例如reinterpret_cast相反,例如:

in_addr** addresses = reinterpret_cast<in_addr**>(ptr);

关于c++ - (struct in_addr **) 和 *(struct in_addr *) 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15378040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com