这是指针问题 利用指针完成菜单里的c语言函数指针

编写一个函数,比较两个字符串是否相等(利用指针完成)c语言:_百度知道
编写一个函数,比较两个字符串是否相等(利用指针完成)c语言:
我有更好的答案
#include &stdio.h&#include &string.h&int same(char *a,char *b){
if (strlen(a) != strlen(b))
while ((*a == *b) && (*a != '\0'))
return ((*a != '\0') ? 0 : 1);};int main(){
char a[100],b[100];
scanf(&%s%s&,a,b);
if (same(a,b) != 0)
printf(&same\n&);
printf(&different\n&);
return 0;}
采纳率:51%
为您推荐:
其他类似问题
c语言的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。利用函数指针实现多分支选项(4)_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
利用函数指针实现多分支选项(4)
&&利用函数指针实现多分支选项(4)
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢豆丁微信公众号
君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
通用菜单程序的C语言函数指针实现方法
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口博客访问: 113264
博文数量: 26
博客积分: 1116
博客等级: 少尉
技术积分: 342
注册时间:
分类: C/C++ 19:35:41
一、使用指针做函数返回值:&1、当使用指针做为函数的返回值时,主函数处的char&*p;将获得调用函数char&*的值,即一个地址值,如oxAE72。此时需要我们注意的是该地址值所指向的空间是否存在(即已向操作系统声明注册,不会被释放,即可能被其他操作修改);2、使用栈内存返回指针是明显错误的,因为栈内存将在调用结束后自动释放,从而主函数使用该地址空间将很危险。[code]&
&&&&&&&&&&&&char* GetMemory()
&&&&&&&&&&&&{ && & & & & & & char p[] = "hi"; && & & & & & &&return p; && & & & & & } && & & & &
&&&&&&&&&&&&void main()
&&&&&&&&&&&&{ && & & & & & &&char *str = GetMemory();
//出错! 得到一块已释放的内存 && & & & & & & printf(str);
&&&&&&&&&&&&} 3、使用堆内存返回指针是正确的,但是注意可能产生内存泄露问题,在使用完毕后主函数中释放该段内存。&&&&例如:&&& & & & & &char* GetMemory()
&&&&&&&&&&&&{ && & & & & & & &char *p = new char[100]; && & & & & & & &return p;
&&&&&&&&&&&&}
&&&&&&&&&&&&void main()
&&&&&&&&&&&&{ && & & & & & & &char *str = GetMemory(); && & & & & & & &delete [] str;
//防止内存泄露!
&& & & & & &}二、使用指针做函数参数:&1、有的情况下我们可能需要需要在调用函数中分配内存,而在主函数中使用,而针对的指针此时为函数的参数。此时应注意形参与实参的问题,因为在C语言中,形参只是继承了实参的值,是另外一个量(ps:返回值也是同理,传递了一个地址值(指针)或实数值),形参的改变并不能引起实参的改变。&2、直接使用形参分配内存的方式显然是错误的,因为实参的值并不会改变,如下则实参一直为NULL:&&& & & & & &void GetMemory(char* p)
&&&&&&&&&&&&{ && & & & & & & char *p = new char[100];
&&&&&&&&&&&&}
&&&&&&&&&&&&void main()
&&&&&&&&&&&&{ && & & & & & & char *str; && & & & & & & GetMemory(str); && & & & & & & strcpy(str, "hi"); // str =&NULL
&&&&&&&&&&&&}
3、由于通过指针是可以传值的,因为此时该指针的地址是在主函数中申请的栈内存,我们通过指针对该栈内存进行操作,从而改变了实参的值。&&& & & & & &void Change(char *p)
&&&&&&&&&&&&{ && & & & & & &&*p = 'b';
&&&&&&&&&&&&}
&&&& & & & &void main()
&&&&&&&&&&&&{ && & & & & & &&char a = 'a';
&&&&&&&&&&&&&&&char* p = &a; && & & & & & & Change(p); && & & & & & & printf("%c\n",&a);&&&&&&&&&&&//值a改变!&&& & & & & &}4、根据上述的启发,我们也可以采用指向指针的指针来进行在调用函数中申请,在主函数中应用。如下:假设a的地址为ox23,内容为'a';而str的地址是ox46,内容为ox23;而pstr的地址是ox79,内容为ox46。&&&&我们通过调用函数GetMemory,从而将pstr的内容赋给了p,此时p&=&ox46。通过对*p(ox23)的操作,即将内存地址为ox23之中的值改为char[100]的首地址,从而完成了对char*&str地址的分配。&&& & & & & &void GetMemory(char** p)
&&&&&&&&&&&&{ && & & & & & & &char *p = new char[100];
&&&&&&&&&&&&} &&
&&&&&&&&&&&&void main()
&&&&&&&&&&&&{ && & & & & & & &char a = 'a'; && & & & & & & &char* str = &a; && & & & & & & &char** pstr = &str; && & & & & & & &GetMemory(pstr);
&&&&&&&&&&&&&&&&strcpy(str, "hi");
&&&&&&&&&&&&} 5、注意指针的释放问题,可能形成悬浮指针。&&&&当我们释放掉一个指针p后,只是告诉操作系统该段内存可以被其他程序使用,而该指针p的地址值(如ox23)仍然存在。如果再次给这块地址赋值是危险的,应该将p指针置为NULL。&&&&调用函数删除主函数中的内存块时,虽然可以通过地址传递直接删除,但由于无法对该指针赋值(形参不能传值),可能造成悬浮指针,所以此时也应该采用指向指针的指针的形参。例如:&&& & & & & &void MemoryFree(char** p)
&&&&&&&&&&&&{ && & & & & & & &delete *p; && & & & & & & &*p = NULL;
&&&&&&&&&&&&}
&&&&&&&&&&&&void main()
&&&&&&&&&&&&{ && & & & & & & &char *str = new char[100]; && & & & & & & &char *pstr = &str; && & & & & & & &MemoryFree(pstr);
&&&&&&&&&&&&}
阅读(10789) | 评论(2) | 转发(0) |
上一篇:没有了
给主人留下些什么吧!~~
博主讲的很好,学习了。
很好的, 收藏了
推荐一个博客,提供很多免费软件编程电子书下载:
http://free-ebooks.appspot.com
请登录后评论。}

我要回帖

更多关于 typedef 函数指针 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信