scanf函数的定义就是这样的,它定义的时候传入的参数是一个地址,所以有&,反正它怎么定义你就怎么用好了。 不过指针本身就是地址,不用&。
你的分析是正确的,str本身就是指针,不需要加&。scanf("%s",&str); 改为scanf("%s",str); 才对。