c语言 while 循环的问题
发布网友
发布时间:2023-12-21 01:36
我来回答
共5个回答
热心网友
时间:2024-02-22 01:43
#include <stdio.h>
void main()
{
int a[]={1,2,3};
int b[]={1,2,3,4,5,6,7};
int *p1,*p2;
p1=a;
p2=b;
int i=0; // 这里要初始化为0,否则会使一个异常值。
while(*p1++==*p2++) // 这里应该是判断是否等于,而不是赋值。
{
printf("%d",a[i++]);
}
}
你是赋值的话就不是这么写。
修改为:
#include <stdio.h>
void main()
{
int a[7]={1,2,3};
int b[7]={1,2,3,4,5,6,7};
int *p1,*p2;
p1=a;
p2=b;
int i=0;
for(;i<7;i++)
{
*p1++=*p2++;
printf("%d",a[i]);
}
}
热心网友
时间:2024-02-22 01:43
错误一:
while(*p1++=*p2++)
“=”这是赋值号,这使得条件都成立。
“==”这才是等号判断
错误二:
while(*p1++=*p2++)不能进行数组越界处理,还是要使用计数器来来测试。
错误三:
变量i没有设置初始值;
正确的代码:
void main()
{
int a[3]={1,2,3};
int b[7]={1,2,3,4,5,6,7};
int *p1,*p2;
p1=a;
p2=b;
int i=0;
while(*p1++==*p2++ && i<3)
{printf("%d",a[i++]);}
}追问我那里没写错 你试试 我在问题上忘写i=0了 程序上有
你试试 我用VC++6.0试的 输出1234567
热心网友
时间:2024-02-22 01:44
内存无法读入是你的赋值语句的问题。p1指向数组a,p2指向数组b.你的赋值语句的地方,*p1++=*p2++.当123都赋值之后,p2指向数组b中的4,可是这之前p1就已指向了数组a的最后一个。在加加的话,p1就不知道指向了内存的什么地方。p1就成了野指针,向野指针里面写东西当然是不允许的了。
热心网友
时间:2024-02-22 01:44
while(*p1++=*p2++)
这个语句始终为真,导致p1或者p2指针越界
正确做法是 :
不能使用p1或者p2当作循环条件,应该使用 数组长度-- 作为判断条件
热心网友
时间:2024-02-22 01:45
可以这样写,
int a[7]={1,2,3};
int b[7]={1,2,3,4,5,6,7};