回 帖 发 新 帖 刷新版面

主题:c小程序编译没错,为何运行出错?

#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个回复)

沙发

#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;
}

板凳


谢谢哈。昨晚睡前想明白了。你的思路也不错。

3 楼

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 楼

#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 楼

我试了试:
#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 楼


就我知道的,printf执行好像确实从右往左,右边变量依次入栈,对应“”内的控制符%再依次出栈、。不知道理解是否准确……

我来回复

您尚未登录,请登录后再回复。点此登录或注册