c++ for循环。-c++ 里面for循环的宏定义有个问题

问题描述

c++ 里面for循环的宏定义有个问题

看问题

#define DL_FOREACH_SAFE2(head,el,tmp,next)

for((el)=(head);(el) && (tmp = (el)->next, 1); (el) = tmp)

为什么是 (tmp = (el)->next, 1);, 这是什么意思,为什么要, 1呢.

解决方案

(tmp = (el)->next, 1)
这里用了一个技巧,按照正常的写法,我们需要把tmp = el->next;写在循环体内。但是我们这里写在循环条件中。
C语言允许逗号表达式,逗号表达式的值是最后一个逗号表达式的值。比如
int x = (2+3,4+5); //x = 9
本质上我们仅仅希望前一个条件(el != null)满足就执行tmp = el->next
但是要把它写在循环判断条件上(在循环开始前执行),必须让它有一个永远为true的表达式值。

解决方案二:

那问题的关键点在于 (el) && (tmp = (el)->next, 1); 这句上面。
刚开始的时候已经(el)=(head)了, el为null就为null,不为null就不为null了。
为什么要加一个(el)上去呢。 另外,(el) && (tmp = (el)->next, 1);这一句是先运行
了(el),再运行tmp = (el)->next, 我觉得tmp = (el)->next运不运行也没作用了。

解决方案三:

我明白了,谢谢你,谢谢,新年快乐!

时间: 2024-08-16 06:19:09

c++ for循环。-c++ 里面for循环的宏定义有个问题的相关文章

循环条件-C语言循环的问题,怎么就成了死循环呢?

问题描述 C语言循环的问题,怎么就成了死循环呢? void countdigst(int last_numberint *count_arry){ int i; for(i= 1;i <= last_number;i++) { //不满足while后i=0,此时为什么i每次进来为1而没有自增为下一个数呢? //也就是为//什么没有执行i++? int temp = 0; while( i != 0) { temp = i%10; count_arry[temp]++; i /= 10; } }

java-Java 循环语句之多重循环

问题描述 Java 循环语句之多重循环 Java 循环语句之for多重循环,在二重for循环中,外层循环每执行一次,内层循环要执行一圈.这一句话是什么意思? 解决方案 for(int i=0;i<5;i++){ for(int j=1;j<=5;j++){//i每增加1,也就是for循环一次,这个循环for要循环完,要循环5次.也就是一圈. } } 解决方案二: Java 循环语句之多重循环循环体中包含循环语句的结构称为多重循环.三种循环语句可以自身嵌套,也可以相互嵌套,最常见的就是二重循环.

增强for循环与普通for循环的区别2

1,增强for循环与普通for循环的区别: 增强for循环必须有被遍历的目标(如集合或数组). 普通for循环遍历数组的时候需要索引. 增强for循环不能获取下标,所以遍历数组时最好使用普通for循环. 2,特点: 书写简洁. 对集合进行遍历,只能获取集合元素,不能对集合进行操作,类似迭代器的简写形式,但是迭代器可以对元素进行remove操作(ListIterator可以进行增删改查的操作). 3,书写格式: for(数据类型变量名 : 被遍历的集合(collection)或者数组) { 执行语

跟我学习javascript的for循环和for...in循环_javascript技巧

大家都知道在JavaScript中提供了两种方式迭代对象: for 循环: for..in循环: 一.for循环 不足: 在于每次循环的时候数组的长度都要去获取: 终止条件要明确: 在for循环中,你可以循环取得数组或是数组类似对象的值,譬如arguments和HTMLCollection对象.通常的循环形式如下: // 次佳的循环 for (var i = 0; i < myarray.length; i++) { // 使用myarray[i]做点什么 } 这种形式的循环的不足在于每次循环的

4.帧循环(游戏主循环),schedule

 1 概述 游戏乃至图形界面的本质是不断地绘图,然而绘图并不是随意的,任何游戏都需要遵循一定的规则来呈现出来,这些规则就体现为游戏逻辑.游戏逻辑会控制游戏内容,使其根据用户输入和时间流逝而改变.因此,游戏可以抽象为不断地重复. 2 以下动作: A 处理用户输入 B 处理定时事件 C 绘图 游戏主循环就是这样的一个循环,它会反复执行以上动作,保持游戏进行下去,直到玩家退出游戏. CCDirector::mainLoop()方法,这个方法负责调动定时器,绘图,发送全局通知,并处理内存回收池.该方

js for循环,为什么一定要加var定义i变量_javascript技巧

譬如下面. 复制代码 代码如下: for(i=0;i<10;i++){//就不写成: var i=0 alert(i); } 但是,这真的不是个好习惯,下面我就说说为什么写Js的for循环一定要加var,否则会时不时给你带来烦人难查的bug. 譬如现在我们要实现这样的功能:输出 10 20 30 40 50 60 70 80 90 100 通过下面code实现,WriteNumber从1到10循环,每次循环调用TenTimes方法返回10倍的索引值. 复制代码 代码如下: <script ty

ASP模板类[实现一维循环和二维循环,可以从文件、数据库、变量取摸板]

变量|模板|数据|数据库|循环 <%'=========================================================' File: class_template.asp' Version:1.0' Date: 2004-5-7' Script Written by R.H' Description: ASP Template Class'=========================================================' Cop

ASP跳出本次循环进入下一循环的方法

  看下面的Java代码,目的是为了当i是3的时候,就不做输出,直接跳到下一个循环. int i = 0; while (i < 5) ...{ i++; if (i == 3) ...{ continue; } System.out.println("I'm not 3, I'm " + i); // Do something else... } 然而在ASP (VB) 应该怎么写呢?不少人就犯难了.在此,我给出些答案供参考,还往多多指教! i = 0 Do While (i

for循环-两个FOR循环嵌套的小代码,求运算过程

问题描述 两个FOR循环嵌套的小代码,求运算过程 public static void main (String args[]) { int i,j; first_loop; for(i=1;i<50;i++) { for(j=2;j<i;j++) if(i%j==0) continue first_loop: System.out.println(i): } } 解决方案 浅谈for循环嵌套的效率两个for循环的优缺点for循环中的if嵌套 解决方案二: 启用单步调试,一步一步慢慢看就行了~