(struct in_addr **)和*(struct in_addr *)的区别
Difference between (struct in_addr **) and *(struct in_addr *)
(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);
(struct in_addr **)
是c风格的强制转换操作符,将其右边的内容转换为指向in_addr
类型结构体(通用网络地址)的指针。
*(struct in_addr *)
是c风格的强制转换操作符,后跟一个解引用操作符(从右向左读),将其右边的内容转换为指向in_addr
的指针,然后对该指针解引用。
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- C++Union/Struct位域的实现和可移植性
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 错误:"Left of getValue must have class/struct/union"
- 在 SVM-Struct 中未定义对 sqrt 的引用(已使用 -lm)
- 数据类型"struct seq<0, 1, 2>{}"含义是什么?
- 附加使用 Struct 作为"multikey"并将 std::vector 用作映射值的映射
- QML/C++/QObject Struct Copy
- 如何在 cpp 中解压缩数字,如果它们是使用 struct.pack(fmt, v1, v2, ..) 打包在 pyth
- Msgpack能否提供更好的性能和与Python的struct.pack()相同的功能?
- 将向量传递给<struct> Lua 表
- MPI_DOUBLE_INT and C++ struct
- C++ 中的"template <typename From, typename Tag> struct Alias;"是什么?
- 如何使用Struct打印交换函数
- 返回类型为struct的函数每次调用时都不返回任何内容
- 对struct::struct的未定义引用是什么意思
- 在c++Primer中使用Struct和Vector时出现错误C2661