C语言函数参数传递疑问:是否均为值传递及指针传参细节
C语言参数传递常见问题解答
问题1:能否认为在C语言中,传递给函数的所有参数或实参都会被复制?
必须可以啊!C语言从根儿上就只有按值传递这一种参数传递方式——不管你传的是普通的int、char,还是指针、结构体,实参的内容都会被完完整整地复制一份,作为函数的形参来用。函数里改形参的话,本质上都是在折腾这份副本,跟原来的实参半毛钱关系都没有(除非你用指针间接去改实参指向的内存,那是另一个逻辑了)。
问题2:修改change函数的注释是否合理?
当然没问题!你改后的注释可比原来的准确多了。
当你调用change(&value)的时候,&value这个指针的值(也就是value的内存地址)会被复制一份给到形参var。这时候var就是个独立的指针副本,但它和原来的&value指向同一块内存。所以注释写成:
// 此处var是与原指针指向同一内存块的指针副本。
完全戳中了要点,把C语言按值传递指针的本质说透了:指针本身是复制过来的,但副本和原指针指着同一个地方,所以对*var赋值,自然就改了那个地址里的内容——也就是原来的value变量的值嘛。
内容的提问来源于stack exchange,提问作者Jonathan Komar
相关产品推荐
相关产品推荐

