手机版
你好,游客 登录 注册
背景:
阅读新闻

C语言中函数体内对外部字符指针赋值

[日期:2014-06-09] 来源:Linux社区  作者:kernal_linux [字体: ]

今天同事问我一个C程序code.c,代码如下:
 
#include  <stdio.h>
 
int  test(char *b)
 
{
 
b = "123\0";
 
return 1;
 
}
 
int  main()
 
{
 
char a[10];
 
test(a);
 
printf("a[] = %s\n", a);
 
return 1;
 
}
 
同事的目的是给数组a赋值一个常量字符数组,但程序打印后显示乱码。旁边的同事以C语言的语义来解释这段代码出现该问题的原因,如给test()传递的参数是a的一个拷贝,test()内部不会改变a的值等等。同事的观点是对的,但这段代码确实值得我们仔细探讨下。

C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码 http://www.linuxidc.com/Linux/2014-05/101227.htm

读C++ Primer 之构造函数陷阱 http://www.linuxidc.com/Linux/2011-08/40176.htm

读C++ Primer 之智能指针 http://www.linuxidc.com/Linux/2011-08/40177.htm

读C++ Primer 之句柄类 http://www.linuxidc.com/Linux/2011-08/40175.htm

C++11 获取系统时间库函数 time since epoch http://www.linuxidc.com/Linux/2014-03/97446.htm

C++11中正则表达式测试 http://www.linuxidc.com/Linux/2012-08/69086.htm
 
1.工作流程:
 
main()的栈中分配了数组a的空间,从高地址到低地址依次是a[9],a[8],a[7], …,a[1],a[0]。然后在更低的栈中分配了4个字节(假设地址占4个字节),存放的内容是数组a的地址,然后将其作为test()的实参。test()函数从main()的栈中把存放数组a的地址的内容改成”123\0”的地址,然后函数返回main(),打印出最后的结果。

更多详情见请继续阅读下一页的精彩内容http://www.linuxidc.com/Linux/2014-06/102918p2.htm

linux
相关资讯       C语言函数指针  C语言指针赋值 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款