【发布时间】:2020-04-22 12:39:19
【问题描述】:
我遇到了recv() 的问题,尽管有要读取的字节,但我总是会得到 -1 的返回值。我的问题是我这样称呼它:
ret = recvfrom(socket, &result, 10, 0, (struct sockaddr *)&addr, (socklen_t)(sizeof(addr)));
虽然最后一个参数实际上是对变量地址的要求,但该变量的地址保持不变。正确的调用是这样的:
socklen_t recsize = sizeof(addr);
ret = recvfrom(socket, &result, 10, 0, (struct sockaddr *)&addr, &recsize);
有没有一种方法可以将指针传递给需要在一行中全部使用指针的函数,而无需创建新变量并传递该变量的地址?
【问题讨论】:
-
请选择 C 或 C++。它们是不同的语言。
-
嗯,不。变量必须存在才能获得其地址。
-
@Peter:嗯,是的。函数需要传递的不是“变量”而是对象的地址,而C以复合字面量的形式提供了临时对象。
-
请注意
recvfrom需要一个指针,因为它有时会在指向的对象中返回信息。您需要该信息来处理recvfrom的所有潜在结果。如果您没有编写代码来处理所有情况,那么现在是开始开发该学科的好时机。
标签: c pointers parameter-passing