c_doggy
2016-06-13 07:43
采纳率: 100%
浏览 1.6k
已采纳

c语言 函数调用指针并修改 但主函数的指针地址没有变化 (strchr函数)

char *my_strchr(char const *str,int ch)
{
char *flag=NULL;

for(;(str=strchr(str,ch))!=NULL;str++)flag=str;

return flag;

}
int main()
{
char *str="hello";
printf("%x\n",my_strchr(str,'l'));
printf("%x\n",my_strchr(str,'h'));
return 0;
}

输出结果:40306b
403068
my_strchr()函数用于输出ch最后一次出现的地址.
但是!!!!my_strchr()函数在使用的时候不是移动了str的位置么,指向了'l'的地址,这时str的位置移动到'l'了,为什么在main中第二次调用查找'h'的时候还可以用呢?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 小灸舞 2016-06-13 07:59
    已采纳

    要改变主函数的指针地址必须传二级指针或者一级指针的引用才行。
    传一级指针只能修改指针所指向的值,而不能改变指针本身的指向。
    在这里,仅仅是main函数里的str和my_strchr的形参str指向了同一块内存,但两个str并不是同一个指针,
    所以你对my_strchr执行++是不会影响到main函数的str的

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • c_doggy 2016-06-13 07:44

    求大家解决我的疑惑。。。。

    评论
    解决 无用
    打赏 举报
  • o_olI 2016-06-13 08:02

    题主对参数传递理解有误,作为参数传递给函数的变量就成了该函数的局部变量,函数内部对该变量进行修改不会影响变量本身的值。

    评论
    解决 无用
    打赏 举报