c存储中的void类型变量

时间:2013-09-29 23:16:06

标签: c sockets struct client-server void

C中的void类型变量是什么? 我有粗略的想法,但不知道如何在下面的场景中使用它们。

服务器/客户端程序

我有一个struct数组,其中包含hostname,server in server。我想通过套接字将它发送给客户端。我怎么能实现它?

struct ipinfo{

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

我读了一些我可以作为void类型变量复制到特定内存位置的地方并发送变量?任何人都可以解释一下这个概念吗?我真的很感激。

3 个答案:

答案 0 :(得分:1)

在C中,唯一的时间void可用作变量类型,如果它是指针。当您不确定要使用何种类型的数据时,它们非常方便。

void * somePointer;

这可以用于各种事情。

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

处理没有类型的普通内存。 Malloc(我相信C ++中的新东西)返回一个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

答案 1 :(得分:0)

当您期望该参数为任何类型时,

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

答案 2 :(得分:0)

我认为无效意味着你希望它意味着什么。 {C}类语言中使用void来表示未知类型,或者没有类型。例如,void*是一个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中,声明为main()的函数具有未指定的参数列表,而不是空列表。

以下是一个例子:

int main(void) {
    ...
}

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