0

C中的void类型变量是什么?我有一个粗略的想法,但不确定如何将它们用于以下场景。

服务器/客户端程序

我有一个结构数组,其中包含服务器中的主机名、地址。我想通过套接字将它发送给客户端。我怎样才能实现它?

struct ipinfo{

  char hostname[64];
  char address[64];
}
struct ipinfo allip[5];

我读了一些我可以作为 void 类型变量复制到特定内存位置的地方,然后他们发送变量?谁能解释一下这个概念?对此,我真的非常感激。

4

3 回答 3

1

在 C 中,唯一可以将 void 用作变量类型的情况是它是一个指针。当您不确定要接收什么类型的数据时,它们很方便。

void * somePointer;

这可以用于各种事情。

在不知道类型的情况下引用对象。

处理没有类型的普通内存。Malloc(我相信 C++ 中的 new)返回一个 void 指针,因为此时内存没有类型。

不过尽量不要使用 void 指针,它们通常是远离的好主意。可能会导致错误和头痛。您通常可以找到更好的解决方案。

void 关键字也可以用在函数前面。

void printHello(void)
{
   printf("Hello");
}

在这个函数中,我们使用 void 因为它没有返回任何东西。void 函数可以简单地执行我们分配给它们的任何任务而不返回任何内容。我们也不需要将任何数据传递给函数,因此我们在参数中指定 void。

注意:如果您曾经学习过 C++,那么您确实需要牢记关于函数参数的一些事情。

void printHello() // <- This is bad in C, it will take any number of anything practically
{
  printf("Hello");
}

如果您不想为 C 传递任何参数,请始终在参数中放置 void。

void printHello() // <- Good in C++, it won't allow any arguments on a call
{
   std::cout << "Hello";
}

但是,您不能将 void 用作变量类型,如

void a = 0;
void b = 's';
void c = 5.5
// You can't use void to store anything
于 2013-09-29T23:40:57.370 回答
0

我不认为 void 意味着你希望它意味着什么。void在类 C 语言中用于表示未知类型或无类型。例如,void*是一个空指针。它是一个内存地址,其中包含一些数据,但未指定数据的格式(甚至其大小)。为了使用该数据,您需要为其分配某种类型,通常通过赋值或显式或隐式强制转换。

这是一个例子:

void * memory = malloc(16);
memory[0] = 0; // this won't compile!
int * int_array = memory;
int_array[0] = 0; // this is ok because we know the type

void 也用于表示函数没有返回值。

这是一个例子:

void exit(int status);

void 也可以用来表示您有意丢弃函数调用的返回值。这可以提高程序的可读性,或抑制某些编译器诊断。

这是一个例子:

(void)memset(memory, 0, 16); // why does memset have a return value??

void 的另一个用途是表示一个空的参数列表。在 C 中,声明为 like 的函数main()具有未指定的参数列表,而不是空列表。

这是一个例子:

int main(void) {
    ...
}

恐怕这些应用程序都不可能帮助您解决套接字问题。

于 2013-09-29T23:26:21.383 回答
0

void 指针主要用于函数参数中,因为您可以将任何类型转换为 void,然后再转换回任何类型而不会丢失数据,唯一不能用 void 指针做的事情是取消引用它。

于 2013-09-29T23:19:57.307 回答