请教关于结果不一致的问题。
本帖最后由 ad1949 于 2020-1-6 10:06 编辑请教各位,下面的程序是要将数组source中的值拷贝到target2和targete3中。但是,为何在main中运行的结果和在函数copy_ptrs()中运行的结果不一致?
正确代码,请见6楼。 本帖最后由 ad1949 于 2020-1-5 15:39 编辑
这是我2020年1月5日在win7的Notepad++中的运行结果:
***********************************************
source = 1.10, target3 = 1.10
source = 2.20, target3 = 2.20
source = 3.30, target3 = 3.30
source = 4.40, target3 = 4.40
source = 5.50, target3 = 5.50
这是在copy_ptrs的运行结果:
source = 2.20, target2 = 1874562648124774700000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000.00
source = 4.40, target2 = 0.00
source = 0.00, target2 = 1.10
source = 19100362997051503000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000.00, target2 = 3.30
source = 0.00, target2 = 5.50
***********************************************
从计算的结果可以看出:
1.执行main中的赋值运算后,成功拷贝了source中的值,但是,根据语法推断的话,应该是错误的;
2.执行copy_ptrs()后,显示并未成功拷贝source中的值,但是,这个结果应该符合语法的规则。
***********************************************
发代码点"<>"符号发代码,
都看不清你写了啥 #include <stdio.h>
void copy_ptrs(double *target3, double *source, int n);
int main(void)
{
double source = {1.1, 2.2, 3.3, 4.4, 5.5};
double target2;
double target3;
double * p_source;
double * p_target3;
p_source = source;
p_target3 = target3;
for(int i = 0; (p_source + i) < p_source + 5; i++)
{
*(p_target3++) = *(p_source++); //这里的计算结果是正确的。。?
printf("source[%d] = %.2f, target3[%d] = %.2f\n", i, source, i, target3);
}
printf("\n");
copy_ptrs(target2, source, 5);
return 0;
}
void copy_ptrs(double *target2, double *source, int n)
{
for(int i = 0; (source + i) < source + n; i++)
{
*(target2++) = *(source++); //error,???
printf("source[%d] = %.2f, target2[%d] = %.2f\n", i, source, i, target2);
}
return;
} Croper 发表于 2020-1-5 16:11
发代码点""符号发代码,
都看不清你写了啥
不好意思。。。
新人,不知道怎么弄。。。{:9_221:} 你确定这是你原来的代码么。。?
我怎么觉得原来的代码是这样的呢?ad1949 发表于 2020-1-5 16:40
不好意思。。。
新人,不知道怎么弄。。。
#include <stdio.h>
void copy_ptrs(double *target3, double *source, int n);
int main(void)
{
double source = {1.1, 2.2, 3.3, 4.4, 5.5};
double target2;
double target3;
double * p_source;
double * p_target3;
p_source = source;
p_target3 = target3;
for(int i = 0; (p_source + i) < p_source + 5; i++)
{
*(p_target3++) = *(p_source++); //这里的计算结果是正确的。。?
printf("source[%d] = %.2f, target3[%d] = %.2f\n", i, source, i, target3);
}
printf("\n");
copy_ptrs(target2, source, 5);
return 0;
}
void copy_ptrs(double *target2, double *source, int n)
{
for(int i = 0; (source + i) < source + n; i++)
{
*(target2++) = *(source++); //error,???
printf("source[%d] = %.2f, target2[%d] = %.2f\n", i, source, i, target2);
}
return;
} 我觉得你代码贴错了,因为你后来贴的代码跟你的描述根本不一致。。
我按我估计的来回答:
在函数copy_ptrs中,你的source和target指针的指向在for循环中值已经改变,那么source[ i]就不是原来的source[ i]了,你可以考虑改成
void copy_ptrs(double *target2, double *source, int n)
{
for(int i = 0; (source + i) < source + n; i++)
{
*(target2++) = *(source++); //error,???
printf("source[%d] = %.2f, target2[%d] = %.2f\n", i, source[-1], i, target2[-1]);
}
return;
} 本帖最后由 ad1949 于 2020-1-6 07:49 编辑
Croper 发表于 2020-1-5 17:18
我觉得你代码贴错了,因为你后来贴的代码跟你的描述根本不一致。。
我按我估计的来回答:
先谢谢大佬,你猜测的那个很对。我又试了一下,不知道第一次复制的时候是怎么弄的?没把复制上。。。
不知道为啥“【i】”打不出来。。。 本帖最后由 ad1949 于 2020-1-6 10:14 编辑
Croper 发表于 2020-1-5 17:18
我觉得你代码贴错了,因为你后来贴的代码跟你的描述根本不一致。。
我按我估计的来回答:
大佬,你给的答案运行结果没问题。
不过我有三个疑问1.根据你6楼的帖子,为什么main中的18到22行和copy_ptrs中的32-36行代码是一样的,但是运行结果不一样?
2.根据语法规则的话*(target2++) = *(source++); 这个表达式,在执行完第一次的结果不应该是这样么?
1)先将target2指向target2,将source指向source;
2)将source的值赋给target2。
3)所以target2的值不应该是垃圾值么?而target2中的值不应该是2.2么?
3.大佬你的数组下标用负数,是为啥?
页:
[1]