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

3

即将出现初学者的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),而是一个常量。
我知道指针是什么,似乎在C中几乎所有的函数都喜欢传递指针而不是变量,这个说法正确吗?

有关指针 - https://dev59.com/cXVC5IYBdhLWcg3w2lGI - Alexei Levenkov
1
你正在问两个不同的问题:为什么要使用const和为什么要使用指针。 - Keith Thompson
2个回答

3

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


此外,在某些情况下,它可以允许代码生成器执行额外的优化。 - Ignacio Vazquez-Abrams
2
@IgnacioVazquez-Abrams:在C语言中,const并没有提供太多的优化。别名问题通常会阻止编译器假设指向const的指针不会改变,至于与非指针相关的const - 如果一个变量在函数中没有被更改,那么编译器通常可以自由地以相同的方式进行优化,无论它是否被注释为const(换句话说,就优化而言,const并没有增加任何东西)。 - Michael Burr

1

C语言没有字符串作为基本类型的概念;它是一个(char)数组,只能作为指向(char)的指针传递给函数。在旧的API中,你也会看到(long)被传递为指针,这是因为C语言实现的许多CPU不能在寄存器中传递(long)(因此不能被return)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接