回复 10 楼 TonyDeng
也就是说,fun()这个函数在原型中就规定了它有两个形参no1,no2。它们都是 family 类型的结构指针,但是由于 const 的原因,这两个指针所指向的数据是不允许被修改的,所以出现 no1->age = 60; no2->age = 80; 的时候编译器一眼就看出了这两个语句在修改no1,no2指向的值,编译器就不会放行。
但是scanf()可以修改结构中的成员数据是因为,no1,no2中的地址被拷贝了一份,类似于镜像一样发送给了scanf(),这两个拷贝的地址和no1,no2指向了同样的结构成员,但是它们没有被规定为const,所以可以通过这两个拷贝的镜像在运行程序时修改它们指向的结构成员。
在书上看到过“按值传递机制”,当时不太懂,现在明白了。版主你说的这句话(注意,這僅僅是編譯器在編譯時的行爲,而不是程序運行時的行爲。)很有深意!是书本上没有的经验之谈,值得菜鸟好好揣摩。
再次感谢版主耐心的回答了被问烦了的scanf()问题!