c函数指针-小白问个关于C指针的问题

作者:用户 来源:互联网 浏览:347 次 时间:2016-02-09 11:11:28

c函数指针

c函数指针-小白问个关于C指针的问题 - 摘要: 小白问个关于C指针的问题point(char*p){p+=3;}main(){charb[4]={'m''n''o''p'}*pt=b;point(pt);printf(""%cn""*pt);}本

问题描述

小白问个关于C指针的问题

point(char *p)
{
p+=3;
}
main()
{ char b[4]={'m''n''o''p'}*pt=b;
point(pt);
printf(""%cn""*pt);
}

本以为答案是p,但是为什么是m?
答案解释是因为这次调用函数是值传递而不是址传递,为何?(*p)+3倒是可以输出p,但是为什么呢?不用函数调用,使用p+3也可以输出p。函数调用到底发生了什么,用指针好迷糊。

解决方案

应该这样理解,把指针传递,传递的是指针的地址,p是地址,可以认为是形参,它是你传入的那个指针地址的一个副本,所以改变*p时,指针指向的内容也会改变。
但是如果 改变指针的地址,比如这里的p+改变以形参,实参是不会发生改变的

解决方案二:

如果你想改变pt的值变成'p',你应该把这样:
point(char **p)
{
p+=3;
}
main()
{ char b[4]={'m''n''o''p'};
char *pt=b;
point(&pt);
printf(""%cn""*pt);
}
这样就能改变指针的值。

解决方案三:

你需要得到m,有两个写法
(1)

point(char &*p)

(2)
*p='m';

解决方案四:

在point()里只可以改变*p,不可以改变p,所以那个p+=3相当于没用。

解决方案五:

(1)你传指针的引用,会改变实参的指针
(2)你修改指针,不会影响实参的指针。但是修改指针指向的内容会影响原来的数组。

解决方案六:

point()函数调用时将pt的形参传递过去,不会影响实参的值,也就是说无论point()函数内部怎么改变,变量的作用范围是函数的内部。

解决方案七:

point函数只能修改p指向的内容,对于指针本身修改的是拷贝,所以无效,你需要传char**二级指针

解决方案八:

当年学指针那叫一个痛苦啊。指针修改不会改变实参。

解决方案九:

在main里边这么调用: point(*pt)

【云栖快讯】诚邀你用自己的技术能力来用心回答每一个问题,通过回答传承技术知识、经验、心得,问答专家期待你加入!  详情请点击
云栖社区(yq.aliyun.com)为您免费提供c函数指针-小白问个关于C指针的问题相关信息,包括 c函数指针 的信息 ,所有c函数指针-小白问个关于C指针的问题相关内容均不代表云栖社区的意见! 该页面h5页面的地址是:https://m.aliyun.com/yunqi/wenzhang/show_92741,您可以点击c函数指针-小白问个关于C指针的问题-手机站访问。
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备

热点导航