c语言循环输出问题求解


int main()
{
    int i;
    for(i=0;i<3;i++)
    printf("%d %d %d",i++,i++,i++);
} 

为什么输出结果是2 1 0
不是应该是0 1 2 吗

在 C 语言中,函数参数的求值顺序是未定义的,不同的编译器和环境中可能产生不同的结果。因此这种依赖于未定义行为的代码应该避免使用,以确保代码的可移植性和可预测性。

这是未定义行为。对于这段代码的输出,C语言标准没有明确规定任何具体的行为,可以有多种不同的结果和表现。

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7500359
  • 你也可以参考下这篇文章:c语言输出自动补0
  • 除此之外, 这篇博客: 超详细讲解C语言结构体实现简易通讯录中的 0.查找函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 由于删除、查找、修改等功能都需要找到某个联系人,所以我们先写一个查找联系人的函数作为其他函数的铺垫,避免其他函数反复写同样代码效率太低。

    int Find(struct Contact*pc, const char* name)//数组传过来本质是首元素地址,const可以防止name的内容被改变
    {
    	int i = 0;
    	for (i = 0;i < pc->sz;i++)
    	{
    		if (strcmp(pc->data[i].name, name) == 0)//字符串比较用strcmp比较,相同返回0,不同返回+-1
    		{
    			return i;//返回该姓名在结构体数组里的下标
    		}
    	}
    	return -1;//数组遍历完没有返回非负数则没有找到,这里返回-1
    }
    
  • 您还可以看一下 王桂林老师的C语言:从放弃到入门课程中的 1-2从源代码到可执行文件小节, 巩固相关知识点