【发布时间】:2021-06-04 20:58:10
【问题描述】:
我有一个结构:
typedef struct addrinfo
{
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
size_t ai_addrlen;
char *ai_canonname;
struct sockaddr *ai_addr;
struct addrinfo *ai_next;
} ADDRINFOA, *PADDRINFOA;
我定义了一个函数,它接受指向 struct addrinfo 类型指针的指针并通过“指针引用”返回值
void getAddress(addrinfo **addr){
addr->ai_addr->sa_data = "0.0.0.0"; //sa_data is a member of ai_addr
}
我使用以下代码调用了函数 getAddress:
addrinfo *IPAddr = new addrinfo();
IPAddr->ai_addr = new sockaddr();
getAddress(&IPAddr);
我收到一个错误:
error: request for member 'ai_addr' in '* IPAddr ', which is of pointer type 'addrinfo*' (maybe you meant to use '->' ?) *IPAddr ->ai_addr->sa_data[14] = {"10.10.10.10"};
【问题讨论】:
-
当你只想从中读取指针时,为什么要将指针作为参数传递?
-
这只是一个使用指针传递引用的练习函数。这种情况更棘手,因为我想访问父结构的成员结构并且不能使用类似:*pointer_to_pointer_parameter = &(a_value)。我希望任何调用 getAddress 都会在函数 getAddress 关闭后更改 pointer_to_pointer_parameter 的值。
-
指向指针的指针通常意味着函数将分配结构(在堆上),初始化它的值并更新参数以传回新分配结构的地址;即工厂函数。
-
void getAddress( **addr)缺少addr的类型信息。 -
同样在 C++ 中,实际上通过引用传递更为惯用,例如:
void getAddress( addrinfo*& addr)而不是传递指针到指针(这是在 C 中实现的方式)
标签: c++ pointers pass-by-reference