《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';这个也去掉,
原题为:初始化一个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';这个也去掉,