在c语言中在windows中启动套接字试图理解c中指针的使用和 清楚地了解为什么某些变量是指针
这段代码
int sock;
struct sockaddr_in ServAddr;
unsigned short ServPort;
char *ServIP;
WSADATA wsaData;
ServIP = "192.168.1.6";
ServPort = 50005;
if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0) {
exit(1);
}
sock = socket(AF_INET, SOCK_STREAM, 0);
memset(&ServAddr, 0, sizeof(ServAddr));
ServAddr.sin_family = AF_INET;
ServAddr.sin_addr.s_addr = inet_addr(ServIP);
ServAddr.sin_port = htons(ServPort);
1.为什么ServIP是指针而ServPort不是指针
unsigned short ServPort;
char *ServIP;`
ServIP = "192.168.1.6";
ServPort = 50005;
2。这些是变量指针吗
struct sockaddr_in ServAddr;
WSADATA wsaData;
struct sockaddr_in 和 WSADATA 是指针
谢谢
1.为什么ServIP是指针而ServPort不是指针
ServIP
是 char *
,因为几乎所有 C 函数处理字符串都需要这种类型。该值实际上是指向字符串的第一个 char
的指针,该指针一直持续到并包括值为 0 的第一个 char
。
ServPort
不是指针,因为它没有理由成为指针。 unsigned short
是此变量的用途所需的类型。
这个问题让我想知道您是否属于那些将指针性视为类似于类型限定符的人,例如
const
,它会产生基本类型的不同变体。 事实并非如此。 指针类型与其所指向的类型是完全不同的类型。它们通常具有不同的大小和表示形式,并且不能与其指向的类型互换。因此,您可以将指针用于需要指针的事物,而不是用于需要非指针的事物。
2。这些是变量指针吗
struct sockaddr_in ServAddr;
struct sockaddr_in
绝对是结构体类型,而不是指针类型。我们通过 struct
关键字的存在以及类型名称中不存在 *
来了解这一点。因此 ServAddr
不是指针。
WSADATA wsaData;
从名称
WSADATA
中并不能立即看出它是否是指针类型。它是一个宏或 typedef 名称,掩盖了细节(实际上是后者)。但是如果我们查找它,我们可以很容易地找到它的文档,这表明WSADATA
是一种结构类型,而不是指针类型。所以 wsaData
不是指针。