2 liyuef123 liyuef123 于 2016.03.26 20:07 提问

关于c中结构体的变量的问题 1C

在学习c的socket的时候
看到了 struct sockaddr_in servaddr,clieaddr; //定义了2个结构体变量
之后bind 的时候
if(bind(sockfd,(struct sockaddr *)&servaddr,len)<0)
{
printf("bind error\n");
return -2;
}

这里的bind函数的servaddr 小括号里面的结构体变量为什么不是 sockaddr_in 却是不跟下划线的sockaddr

3个回答

Dennis_Zip
Dennis_Zip   2016.03.26 20:57

socket套接字不止是应用于IPv4 英特网域(AF_INET),sockaddr_in 只是 IPv4因特网域的地址结构,socket还可应用于 IPv6 、UNIX域 等其他通信域。

qq423399099
qq423399099   Ds   Rxr 2016.03.26 21:59

sockaddr和sockaddr_in在字节长度上都为16个BYTE,可以进行转换

 struct   sockaddr   {  
                unsigned   short   sa_family;    //2 
                char   sa_data[14];     //14
        };  
  //上面是通用的socket地址,具体到Internet   socket,用下面的结构,二者可以进行类型转换           
  struct   sockaddr_in   {  
                short   int   sin_family;     //2
                unsigned   short   int   sin_port;     //2
                struct   in_addr   sin_addr;     ‘//4
                unsigned   char   sin_zero[8];     //8
        };  

通常的做法是:填值的时候使用sockaddr_in结构,而作为函数(如bin, accept, connect等)的参数传入的时候转换成sockaddr结构就行了,毕竟都是16个字符长。

lx624909677
lx624909677   Ds   Rxr 2016.03.27 23:42

那完全是俩类型啊,你看下bind函数的声明地方,用的是什么类型

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
<C语言>结构体与联合体(共用体)的地址排布问题(内存字节对齐)
作者:wsg 时间:2017年8月15日 一、我们先来看看这个结构体的大小: struct test { short a; double b; char c; }x;在32位系统下,short型占2个字节,double型占8个字节,char型占1个字节,那么该结构体所占空间大小是我们想象中的11个字节吗? 结果是16,并不是11,这是来的呢?我们先把这个问题放到一
C/C++结构体详解
C/C++中关于结构体的详细介绍,其中包括结构体作为函数体变量进行传递的相关介绍。
浅谈结构体内变量赋值问题
结构体内变量赋值暂且分为三种(笔者此时只能想到三种) 1.定义时赋值 2.定义后对变量挨个赋值 3.利用函数进行赋值 赋值时再分为两类 1.非数组赋值 2.数组赋值 1.比较简单,在此不做过多介绍,只是简单贴下代码。 struct student{ char name[]; int age; }b; int main(){ struct student a =
有关结构体的一些题目
1、设有下面的结构体和结构变量定义: struct student { int id; char *name; int math; };关于结构体类型变量赋值正确的是() A、 studl.id=1001; studl.name=”Tom”; B、 id=1001; *studl.name=”Tom”; C、
C语言中结构体变量之间赋值
最近,我阅读了某新员工小刘写的C语言代码,发现其对结构体变量之间的赋值不是很熟悉。对于两个相同类型的结构体变量,他均采用的是逐个成员变量直接赋值的形式。如下的代码示例:/********************************************************************** * 版权所有 (C)2015, Zhou Zhaoxiong。 * * 文件名称:
C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
C语言(地址对齐和结构体大小)
结构体的大小取决于每个成员的大小以及他们的地址对齐要求,由于地址需要对齐,因此结构体内部一般都存在填充现象。   拓展: 变量的地址需要对齐意味着:在内存中开辟一块空间(即变量)的时候,并不是随便搞一块适当大小的内存就可以了,我们对这块内存的地址是有要求的,比如int型或者double型数据的地址必须是4的整数倍,再如short型数据的地址必须是2的整数倍等等,这些要求,就是所谓
关于在 C 语言结构体中使用函数指针的问题
结构体是 C 语言中一个非常重要的自定义数据类型,它描述了一系列相同类型或不同类型数据构成的数据集合。但是在 C 语言的结构体成员却不能是函数,针对这一问题,本文分析探讨了将函数指针作为结构体成员的理论和方法。通过在结构体中定义函数指针类型的成员,从而实现了在结构体中使用函数的目的。
C语言中结构体参数变量的传递
【文章摘要】       在C语言中,结构体参数变量经常作为函数的参数来进行传递。但如果参数设置不当,会出现内存问题。       本文以实际的程序代码为例,详细地介绍如何正确地使用结构体参数变量,为相关的开发工作提供了参考。【关键词】       C语言  结构体  函数  参数  传递 一、前言       本文中的程序实现对员工信息结构体字段赋值并打印出来的功能。该结构体的定义如下:// 员
C中对于结构体成员的两种引用方式适用场合的区别
C中对于结构体成员的两种引用方式: 1、结构体变量.成员; 2、结构体变量->成员;其中,第一种方式只能在结构体变量是结构体实体时能使用,而第二种方式是当结构体变量为指针类型的时候使用。 请看下面的简单例子就一目了然。#include<stdio.h>struct student{ //定义一个学生结构体 char name[30]; int age; }stu =