第一题:fun(a,5),则p指向数组a的首地址,然而在fun函数里面的for循环,p=b,则指向b数组的首地址,跟a无关了。其次,printf("%s\n",A); A哪里来的?C语言是区分大小写的。
第二题与第三题:*s=a,s指向a数组首地址,然后在fun函数里,s又指向别的地址去了,所以函数里的操作与main里的s 无关,main里的s还是指向a数组首地址,所以*s的值还是a数据的第一个。
这就是实参和形参,不同函数你想象为不同的空间。在main函数把值传给fun函数,也就是值复制过去一个,怎么变都不关main函数里面的事,但是fun函数是用指针,就是main函数变量的地址的,就能影响到main函数的变量了。然而fun函数的指针又指向别处了,就又跟main无关了!
第一题是因为在for循环的时候将p的值修改为本地临时变量的值。然后再做变化,所以与后面的题目一致,都是局部变量的变化不影响实参。
第二题和第三题是一样的,就只解释第二题了。
当我们将s传递到函数中之后,此时的s就是一个局部变量了,这里再将s重新赋值,对外部是不影响的。所以在返回函数调用者的时候,s的值依然不变。
第一题,是因为,函数内部创建了一个形式参量,接受了a的地址,然后在for循环里,这个参量又被赋值指向内部变量数组b,所以,它就不会对a产生影响.
我等一下给你讲后面两题
第二题类似,函数创建了一个形式参量接受了s所指向的地址,然后又让这个参量指向malloc出来的内存.所以也不会对原地址的数据产生影响
第三题也是类似,函数用参量接受了地址之后就是参量指向另一个地址,所以仍然不会对原地址的数据产生影响.
你要理解形式参量是函数自己构造的,它接受的只是主函数传输的一个数值,再这三道题里面这些数值是地址.如果参量不再指向传输过来的地址,就不能对地址所对应的数据进行操作
不懂欢迎追问