当指针之间发生赋值或者传参,必须满足两个条件:
两个操作数都是指向有限定符或无限定符的相容类型的指针;
左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。
因此,常常可以在库函数从看到形参类型是 const *
,而可以接受的实参类型既可以是 const *
,也可以是指针变量。例如 strlen 函数是这样声明的:
size_t strlen(const char *str)
因为参数str是“指向常量的指针”,具有const限定符,所以传参(类似赋值)的过程可以接受像"hello"
这样的字面值,也可以接受像char *buf = (char *)malloc(n)
这样的变量参数。