求一道C语言问题

#include<stdio.h>voidInitialize(char*a,char*b){a[0]='T';a[1]='h';a[2]='i';a[3]='s';a[... #include <stdio.h>
void Initialize (char * a, char * b) {
a[0] = 'T'; a[1] = 'h'; a[2] = 'i';
a[3] = 's'; a[4] = ' '; a[5] = 'i'; a[6] = 's';
a[7] = ' '; a[8] = 'A'; a[9] = '\0';
b = a;
b[8] = 'B';
}
#define ARRAY_SIZE 10
char a[ARRAY_SIZE];
char b[ARRAY_SIZE];
int main(int argc, char * argv[]) {
Initialize(a, b);
printf("%s\n%s\n", a, b);
return 0;
}

题意是打印两个 This is B,即:
This is B
This is B

但程序的运行结果是:
This is B
(空)

为何会这样?
在Initialize()里,b已经指向a了,为什么退出Initialize()后,b又指向了原来的地址呢?
展开
 我来答
ymyhgzs
2010-03-26 · TA获得超过299个赞
知道小有建树答主
回答量:731
采纳率:0%
帮助的人:263万
展开全部
This is B
(空)
这个结果完全正确!你的指针知识和函数形参与实参的知识太弱!
要加强学习!

char a[ARRAY_SIZE];
char b[ARRAY_SIZE];
这是两个已开辟空间的了数组

void Initialize (char * a, char * b) 这是两个形参,纯指针!

Initialize(a, b); 这句过后,形参指针ab就分别指向了数组ab!
a[0] =.....这是通过指针a间接往数组a赋值!

b = a;//b指针本来指向数组b ,但这句边变成把b指针指向a指针所指向的空间,也就是b指针也指向了数组a,而不是内容copy!

This is B
(空)
第二句是空那是因为b数组从未被赋值,它都是0,0是字符串结束符,

在Initialize()里,b已经指向a了,为什么退出Initialize()后,b又指向了原来的地址呢?

你应该好好复习一下形参与实参,局部变量与全局
liusanhappy
2010-03-26 · TA获得超过465个赞
知道小有建树答主
回答量:506
采纳率:0%
帮助的人:377万
展开全部
改成*b=a,或b=*a试试,好久不看C语言了!哈哈,都忘了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-03-26
展开全部
Initialize()函数中的 b = a;
并不能将a字符数组中的内容复制到b字符数组中,而是将字符指针形参b指向a,而这也并不是改为全局变量b数组的内容,应该对b数组的每个元素逐个复制,或者调用 strcpy()函数复制字符串
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式