为什么这个函数接受`const char *`作为参数而不只是`char *`?

时间:2012-04-14 04:18:48

标签: c function pointers

Noob C提问:

#include <sys/types.h> 
#include <sys/socket.h> 
#include <netdb.h> 
int 
getaddrinfo(const char *hostname, const char *servname, const struct addrinfo *hints, struct addrinfo **res)

void 
freeaddrinfo(struct addrinfo *ai)

取自http://www.nxmnpg.com/3/getaddrinfo。即我感兴趣的是为什么它不仅仅是getaddrinfo(char * hostname)而是一个const而不是。

我知道指针是什么。在我看来,C中的几乎所有函数都更喜欢传递给变量的指针,这是正确的吗?

2 个答案:

答案 0 :(得分:3)

const限定符是函数与您签订的合同,确保您不会更改传递给它的任何const参数的值。这可以由编译器验证,因此这是一个在漫长的早晨为您添加额外安全和保证的好方法(;

答案 1 :(得分:1)

C没有字符串作为基本类型的概念;它是一个(char)数组,只能作为指向(char)的指针传递给函数。您还将看到(long)作为旧API中的指针传递,可追溯到实现C的许多CPU无法在寄存器中传递(long)时(因此无法{ {1}} ED)。