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

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的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面