C语言 指针问题 求大佬帮我看看 谢谢

爱写BUG的老冉 2019-02-17 09:56:51
copy_arr(target1, source, 5);,copy_ptr(target2, source, 5);这两个函数运行完成之后都是符合要求的,但copy_ptrs(target3, source, source + 5);运行后,前面两个复制的全变成垃圾值了,是我指针用错了吗?


//将source的值通过三种方法复制到target1,target2,target3里面
//使用带数组表示法的函数进行第一份拷贝。
//使用带指针表示法和指针递增的函数进行第二份拷贝。
//把目标数组名、源数组名和带靠背的元素个数作为前两个函数的参数。
//第三个函数以目标数组名,源数组名和指向源数组最后一个元素后面的元素的指针。

#include <stdio.h>

void copy_arr(double *a, double *b, int c);
void copy_ptr(double *a, double *b, int c);
void copy_ptrs(double *a, double *b, double *c);

int main()
{
double source[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
double target1[5];
double target2[5];
double target3[5];
int i;

copy_arr(target1, source, 5);
copy_ptr(target2, source, 5);
copy_ptrs(target3, source, source + 5);
for(i = 0; i < 5; i++)
printf("%10g%10g%10g%10g\n", source[i], target1[i], target2[i], target3[i]);

return 0;
}

void copy_arr(double *a, double *b, int c)
{
int i;
double *p = a;
for(i = 0; i < c; i++)
p[i] = b[i];
}

void copy_ptr(double *a, double *b, int c)
{
double *p = a;
int i;
for(i = 0; i < c; i++, p++)
*p = b[i];
}

void copy_ptrs(double *a, double *b, double *c)
{
int i;
double *p = a;
for(i = 0; p != c; i++, p++)
*p = b[i];
}
...全文
182 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
coding-demo 2019-02-20
  • 打赏
  • 举报
回复
第三个函数p指向b就好了
名字在哪啊 2019-02-17
  • 打赏
  • 举报
回复
客气了
爱写BUG的老冉 2019-02-17
  • 打赏
  • 举报
回复
引用 3 楼 或✘许✔吧的回复:
上面是我的指针使用习惯,我把%10g也该成f了
其实你的主要问题是第三个循环跳不出指针p的地址不可能等于c的地址(因为他们根本就不是指向同一个数组,指针的比较只能是在指向同一个数组的时候才有意义,不然不可能相等)也就没有跳出条件
可以改动一下第三个调用函数就可以
如图
好的,我懂了,原来是我不等式那里错了啊,谢谢你
名字在哪啊 2019-02-17
  • 打赏
  • 举报
回复
上面是我的指针使用习惯,我把%10g也该成f了
其实你的主要问题是第三个循环跳不出指针p的地址不可能等于c的地址(因为他们根本就不是指向同一个数组,指针的比较只能是在指向同一个数组的时候才有意义,不然不可能相等)也就没有跳出条件
可以改动一下第三个调用函数就可以
如图
名字在哪啊 2019-02-17
  • 打赏
  • 举报
回复
名字在哪啊 2019-02-17
  • 打赏
  • 举报
回复
额。。你的代码有点问题,我改了一下,你可以对比一下,(我理解的题意)
#include <stdio.h>

void copy_arr(double *a, double *b, int c);
void copy_ptr(double *a, double *b, int c);
void copy_ptrs(double *a, double *b, double *c);

int main()
{
double source[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
double target1[5];
double target2[5];
double target3[5];
int i;

copy_arr(target1, source, 5);
copy_ptr(target2, source, 5);
copy_ptrs(target3, source, source + 5);
for(i = 0; i < 5; i++)
printf("%10f%10f%10f%10f\n", source[i], target1[i], target2[i], target3[i]);

return 0;
}

void copy_arr(double *a, double *b, int c)
{
int i;
for(i = 0; i < c; i++)
a[i] = b[i];
}

void copy_ptr(double *a, double *b, int c)
{
double *p;
p=b;
int i;
for(i = 0; i < c; i++, p++)
a[i] = *p;
}

void copy_ptrs(double *a, double *b, double *c)
{
int i;
double *p;
p=b;
for(i = 0; p != c; i++, p++)
a[i]= *p;
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧