我正在读一本由 Brian W. Kernighan 和 Dennis M. Ritchie 撰写的《c 编程语言》一书。
本书列出了下面的代码
void strcpy(char *s, char *t){
while((*s = *t) != '\0'){
s++;
t++;
}
}
Run Code Online (Sandbox Code Playgroud)
并说:
因为参数是按值传递的,所以 strcpy 可以以任何它喜欢的方式使用参数 s和t
我不同意这一点。为什么上面的参数是按值传递的?
根据另一本书《C 如何编程》:
在 C 中,您使用指针和间接运算符来模拟引用调用。当调用带有应修改参数的函数时,将传递参数的地址。
从后一个角度来看,它绝对是按引用调用。
请告诉我哪种方法是正确的以及为什么,谢谢!
顺便说一句,赋值后*s = *t
,与哪一个进行比较'\0'
?*s
或者*t
?
(long)&((FLASH_CONF_STRUCT*)0)->vlan
Run Code Online (Sandbox Code Playgroud)
FLASH_CONF_STRUCT
是结构类型,并且vlan
是该结构的成员。
这个表达式怎么拼?