繁体   English   中英

初始化结构指针-c

[英]initializing a structure pointer - c

抱歉,这是一个太简单的问题。 我试图编译一些套接字调用代码,所以我不得不使用它

SOCKADDR_IN * sin;
sin.sin_addr.s_addr    = htonl(INADDR_ANY);   

问题是,我被告知必须初始化指针。 (是否有必要?)顺便说一句,如何初始化结构指针?

必须为SOCKADDR_IN实例分配内存。 但是,您不必创建一个指针。 您可以将其分配在堆栈上

SOCKADDR_IN sin;
sin.sin_addr.s_addr    = htonl(INADDR_ANY);

然后使用地址运算符&如果您想将sin传递给需要SOCKADDR_IN*的函数,

SOCKADDR_IN sin;
sin.sin_addr.s_addr    = htonl(INADDR_ANY);
....
function_using_socket_pointer(&sin);

更新:似乎您想使用动态分配的指针。 您可以使用

SOCKADDR_IN* sin = malloc(sizeof(*sin));
if (sin == NULL) {
    /* insert oom handling here */
}
sin.sin_addr.s_addr    = htonl(INADDR_ANY);
....
free(sin);

您想在堆栈上声明一个而不是作为一个指针。 指针只是一个内存地址,而不是对象的实际实例。

只需将代码更改为

SOCKADDR_IN sin;
sin.sin_addr.s_addr    = htonl(INADDR_ANY);   

然后,当您需要使用它时,使用如下地址: &sin

编辑原始问题答案

如果确实要初始化一个指针,可以这样做:

SOCKADDR_IN* sin = (SOCKASSR_IN*)malloc(sizeof(SOCKADDR_IN));
....use sin....
free(sin);

这将在堆上为您分配内存,大小设置为SOCKADDR_IN结构的大小。 但是如前所述,这是不必要的,通常应避免,除非您需要在当前堆栈框架(函数)之外使用此结构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM