《C Primer Plus 》中的一指针编程题,返回值有关问题,求帮助

《C Primer Plus 》中的一指针编程题,返回值问题,求帮助
原题为:初始化一个double数组,然后把数组内容复制到另外两个数组,一个函数用数组,另一个函数用指针.....
问题有二:请看注释

#include<stdio.h>

double copy_arr(double source[], double targetl[],int n);
double copy_ptr(double * source, double * target2,int n);
int main()

{
int index = 0;
double target1[5] = {0};
double target2[5] = {0};
double source[5] = {1.1,2.2,3.3,4.4,5.5};

printf("The original array:\n");

for (index = 0;index < 5;index++) 
printf("%4.1lf",source[index]);

copy_arr(source,target1,5);

copy_ptr(source,target2,5);

printf("\nThe target1 array: \n");

for (index = 0;index < 5;index++) 
printf("%4.1lf",target1[index]);

printf("\nThe target2 array:\n");

for (index = 0;index < 5;index++) 
printf("%4.1lf",target2[index]);

putchar('\n');

return 0;
 
}
double copy_arr(double source[], double target1[],int n)
{

int i = 0;

for (;i < n;i++)
target1[i] = source[i];

source[i] = '\0'; //为什么多了这一行代码,运行结果便出错?

return target1[i]; //这里返回的是一个地址(double *)?可我定义的不是double型(double cpoy_arr)吗?
}
double copy_ptr(double * source, double * target2,int n)
{
int i = 0;

for(;i < n;i++) 
*target2++ = *source++;

return *target2;
}

------解决方案--------------------
for (;i < n;i++)
target1[i] = source[i];

source[i] = '\0'; //为什么多了这一行代码,运行结果便出错?

return target1[i]; //这里返回的是一个地址(double *)?可我定义的不是double型(double cpoy_arr)吗?
========================
for循环结束,i已等于n。向source[i]赋值即向source[n],越界了。且double数组,向它赋值字符,何意?
target1[i]这句哪里来的?它是double数值,不过一样越界了
------解决方案--------------------
指针一塌糊涂,好好补吧,一点也不打击你。
------解决方案--------------------
不用返回别的,直接return 0;就好了,反正你用不到返回值,记得把source[i] = '\0';这个也去掉,