注册 登录
编程论坛 C++教室

[求助]一道数组题,大家研究一下~!

dearbot 发布于 2007-08-30 20:04, 813 次点击
#include<stdio.h>
main()
{
char a1[5]={'H','e','l','l','o'};
char a2[5]={'W','o','r','l','d'}; //定义三个字符数组,并初始化a1,a2
char a3[10];
char *p1,*p2,*p3; //定义三个指针
int i;
p1=a1;
p2=a2; //分别把字符数组a1,a2,a3赋给指针p1,p2,p3
p3=a3;
for(i=0;i<5;i++,p1++,p3++) //先把a1的值赋给a3
a3[i]=a1[i];
for(i=0;i<5;i++,p2++,p3++) //在把a2的值赋给a3
a3[i+5]=a2[i];
for(i=0;i<10;i++,p3++) //最后输出
printf("%c",a3[i]);
printf("\n");
}

-------------------------------------------------------------------------------------------------------------------------------------

以上就是源代码,小弟有一点不明白:"在把a2的值赋给a3"时,for循环下的"a3[i+5]=a2[i]"数组"a3[i]"为什么要写成"a3[i+5]",就是为什么要加个5呢?
第二点就是:"为什么两个数组不能直接相加?"

HELP~!(*&^%$#@!~!!!!!! THANK U VERY MUCH!

8 回复
#2
blueboy820062007-08-30 22:47
首先,a3有10个元素,a1,a2各5个,
这题是想把a1中的元素放到a3的前5个位置上,把a2中的元素放到a3的后5个位置上,
所以是a3[i+5]=a2[i];
其次,数组不能进行抽象操作,也就是不能整体操作啦,
只能对其中的元素进行单独操作.
如不能写A[5]=B[5]
而要写for(int i(0);i<5;i++)
A[i]=B[i];

这可是基础知识啊!

[此贴子已经被作者于2007-9-1 15:13:43编辑过]

#3
冰的热度2007-09-01 15:01
意思是把a1的五个元素放到a3中,这个时候a3[0]=H,a3[1]=e,a3[2]=l,a3[3]=l,a3[4]=o
然后把a2的五个元素接着往下放,所以a3[5]=W,a3[6]=o,a3[7]=r,a3[8]=l,a3[9]=d

实际上是起到一个连接作用,如果不+5,那么得到的结果是a3[0]=W,a3[1]=o,a3[2]=r,a3[3]=l,a3[4]=d.

也就是a2的五个元素把a1的五个元素覆盖了,你自己改改,运行一下就知道了
#4
dearbot2007-09-01 22:37
回复:(blueboy82006)首先,a3有10个元素,a1,a2各5个...
谢谢以上各位的解答,我会努力加油地~!
#5
福尔摩斯2007-09-01 22:51

这题定义指针根本毫无意义

#6
penganlph2007-09-03 21:11
对,指针没什么意义。
#7
qwl19822007-09-04 01:41
主要作用是两个数组的连接,
a3[10]的前5个元素a3[0]-a3[4]存放的是a1[5]的5个元素
后5个元素a[5]-a[9]存放a2[5]的5个元素
因为是用变量i来控制数组元素的存取
在第二个for循环的时候需要在a3[10]数组的第6个位置开始存放a2[5]的5个元素
所以赋值写成a3[i+5]=a2[i];
也可以修改成
for(i=5;i<10;i++;)
a3[i]=a2[i-5];
道理是一样的。
#8
faee02007-09-11 14:30
用指针显示LZ有水平,哇哈哈~~
#9
ondy2007-09-11 20:11

汗!i+5是把数组里的无素放在后面!!
你指针没一点用
LZ请注意风格!!
main() 前面写 int 后面写 return 0;

[此贴子已经被作者于2007-9-11 20:13:08编辑过]

1