主题:c小程序编译没错,为何运行出错?
e32570061
[专家分:0] 发布于 2011-01-18 00:05:00
#include"stdio.h"
void main()
{
int i;
int a[3];
int *p;
printf("请输入三个数:\n");
for(i=0;i<=2;i++)
scanf("%d",&a[i]);
for(*p=*a;p<p++;)
{printf("%d",&p);
p=p++;
}
}
回复列表 (共6个回复)
沙发
yuan067 [专家分:60] 发布于 2011-01-18 03:42:00
#include"stdio.h"
int main()
{
int i;
int a[3];
int *p;
printf("请输入三个数:\n");
for(i=0;i<=2;i++) scanf("%d",&a[i]);
for(p=a;p<(a+3);p++) printf("%d",*p);
return 0;
}
板凳
e32570061 [专家分:0] 发布于 2011-01-18 21:12:00
谢谢哈。昨晚睡前想明白了。你的思路也不错。
3 楼
LoveCsys [专家分:0] 发布于 2011-01-20 13:26:00
for(*p=*a;p<p++;)
{printf("%d",&p); p=p++;
不知道想实现什么功能,输出输入的3个数?p和a都是指针,*p=*a是p指针指向内存字节存放a[0],p指针没有赋值,它的指向是危险的?给*p赋值可能会有bug,&p是求地址,输出值没意义感觉,p=p++中p++表达式值为p,然后在++p,在p=赋值,所以p=p++,p不发生变化,p<p++同样,不成立,感觉是假设p=5,p<p++,即(5+1)<5,不成立,for循环只执行一次。我初学C说的不对请指出!
请问p=p++的过程?是p++表达式的值保留,在++p,在把p++表达式保留的值赋给p,是这样吗?
4 楼
LoveCsys [专家分:0] 发布于 2011-01-20 13:43:00
#include<stdio.h>
int main()
{int i;
int a[3];
printf("请输入三个数:\n");
for(i=0;i<=5;i++)
if(i<=2) scanf("%d",&a[i]);else
printf("%d",a[i-3]);
return 0; }
5 楼
LoveCsys [专家分:0] 发布于 2011-01-20 14:47:00
我试了试:
#include<stdio.h>
void main()
{int i=10;
printf("i=>%d\t:",i);
printf("i++=>%d\t<---\ti=>%d\n",i++,i);
i=10;
printf("i=>%d\t:",i);
printf("i=>%d\t<---\ti++=>%d\n",i,i++);
i=10;
printf("i=>%d\t:",i);
printf("++i=>%d\t<---\ti=>%d\n",++i,i);
i=10;
printf("i=>%d\t:",i);
printf("i=>%d\t<---\t++i=>%d\n",i,++i);
i=10;
printf("i=>%d\t:",i);
printf("i=i++=>%d\t<---\ti=>%d\n",i=i++,i);
i=10;
printf("i=>%d\t:",i);
printf("i=>%d\t<---\ti=i++=>%d\n",i,i=i++);
i=10;
printf("i=>%d\t:",i);
printf("i=++i=>%d\t<---\ti=>%d\n",i=++i,i);
i=10;
printf("i=>%d\t:",i);
printf("i=>%d\t<---\ti=++i=>%d\n",i,i=++i);
}
感觉i=i++是 表达式的值即i值--->++i--->i=i++表达式的值,
printf输出顺序是从右到左,不知道和编译器是否有关,我用borlandc3.1。
6 楼
fragileeye [专家分:1990] 发布于 2011-01-20 15:34:00
就我知道的,printf执行好像确实从右往左,右边变量依次入栈,对应“”内的控制符%再依次出栈、。不知道理解是否准确……
我来回复