我无法找到我的程序中的任何错误,但它是不会放弃希望的输出
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int a[]={1,2,3,4,5};
int b[]={0,0,0,0,0};
int *p;
int i;
p=b;
for(i =0 ; i<5 ; i++)
{
b[i]=a[i]+1;
*p=b[i]-1;
printf(" %i \t %i \t %i \n" ,*p,b[i],a[i]);
}
return 0;
}
我想要的输出:我无法找到我的程序中的任何错误,但它是不会放弃希望的输出
*p b a
1 2 1
2 3 2
3 4 3
4 5 4
5 6 5
,但它显示的是这样的:
*p b a
1 1 1
2 3 2
3 4 3
4 5 4
5 6 5
即使我是在每个[]中添加+1。但是对于第一次打印,它显示1个输出。为什么?
这将是你的程序的工作版本:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int a[]={1,2,3,4,5};
int b[]={0,0,0,0,0};
int c[]={0,0,0,0,0}; //another array
int *p;
int i;
p=c; // point p to a new array to write to.
for(i =0 ; i<5 ; i++)
{
b[i]=a[i]+1;
*p=(b[i]-1);
printf(" %i \t %i \t %i \n" ,*p,b[i],a[i]);
}
return 0;
}
感谢它工作:) – 2013-03-05 14:46:27
p=b;
设置p
指向b[0]
。所以尽管b[0]
增加了b[i]=a[i]+1;
,但它减少了*p=b[i]-1;
。
帮助我解决它,而不创建下一个阵列 – 2013-03-05 14:54:40
的问题是:
int a[]={1,2,3,4,5};
int b[]={0,0,0,0,0};
int *p;
int i;
p=b; // <<---- HERE
你做出p
指向阵列b
的第一个元素,则在这样的代码:
b[i] = a[i]+1;
*p = b[i]-1;
虽然分配值2
到第一元件,*p = b[i]-1;
再次用1
重写,这就是为什么你的输出的第一行是:
1 1 1
我如何删除此错误,而不创建另一个数组? – 2013-03-05 14:52:12
的关键是设定压力P = B。 p和b都是指针,这意味着* p和b [0]都指向相同的数据。
在循环的第一次迭代中,您首先将一个添加到b [0],然后您将其中一个删除。对于以下迭代* p仍然与b [0]相同,但是该值取自较高的索引。
'* p = b [i] -1;'每次用'b [i] -1'替换'b [0]'的值。所以在第一个使用'i = 0'的循环中,你正在递减'b [0]'。 – koopajah 2013-03-05 14:36:34
很奇怪http://stackoverflow.com/questions/15224892/c-pointers-and-array必须是一个家庭作业:) – 2013-03-05 14:36:59