Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中使用指针的for循环声明_C_Loops_Pointers_Struct - Fatal编程技术网

C中使用指针的for循环声明

C中使用指针的for循环声明,c,loops,pointers,struct,C,Loops,Pointers,Struct,对于循环,我有两个问题 我对使用链表和指针相当陌生。我看到一些代码试图使用for循环将数据插入链表。然而,for循环声明对我来说是完全陌生的,我不明白它是如何工作的 我对典型for循环的理解包括3个部分: 声明迭代器 循环条件 递增/递减迭代器 例如: main() { int i; for (i = 0; i < 5; i++) { //do something.... } } 循环1: 循环2: for(q=&labelptr,count=0;*q&&count

对于循环,我有两个问题

我对使用链表和指针相当陌生。我看到一些代码试图使用
for
循环将数据插入链表。然而,for循环声明对我来说是完全陌生的,我不明白它是如何工作的

我对典型for循环的理解包括3个部分:

  • 声明迭代器
  • 循环条件
  • 递增/递减迭代器
  • 例如:

    main()
    {
      int i;
    
      for (i = 0; i < 5; i++) {
        //do something....
      }
    }
    
    循环1: 循环2:
    for(q=&labelptr,count=0;*q&&countnextlabel),count++)
    
    这些说法的真正含义是什么

    编辑:感谢到目前为止的回复。我知道这两个循环现在都在做什么。我花了一些时间去理解两个初始化变量指针q和int count;对于(q=&labelptr,count=0;)


    我以前不习惯在for循环的初始化部分看到两个声明,但现在已经清楚了。谢谢!

    一些供将来使用的参考。也可以查看C标记wiki。只需将鼠标悬停在C标记上,然后单击底部的“信息”

    快速总结如下:

    • q=&labelptr

      这是在循环开始时将q设置为指向labelptr
    • *q

      这必须为真,循环才能继续。当
      *q
      为假时,循环结束。
      *q
      将在q指向空指针或零(也称为空)时为假
    • q=&((*q)->nextlabel)

      这将获取(
      *q)->nextlabel的地址
    for循环沿着链表向下走,直到它到达一个空指针。真的很简单。

    你总是可以写

    for (initializer;  test;  update)
        body;
    
    作为

    这有时会使它们更容易阅读

    循环1:
    q
    开始指向
    labelptr
    ;当
    q
    不为空时,执行正文,然后通过跟随
    nextlabel
    指针将
    q
    移动到下一个标签

    循环2:
    for(q=&labelptr,count=0;
    *q&计数<最大管数;
    q=&(*q)->nextlabel),count++)
    

    几乎是一样的事情,但在我们进行的过程中保持计数,如果循环达到
    MaxTube
    迭代,则退出循环。

    你似乎获得了否决票,因为你从来没有问过问题。你到底想知道什么?为什么C语言书籍或网站没有为你回答?如果你更改(3)中的“递增/递减”部分要更新,你的代码将完全融入其中。看看你的C++标签是误导性的。几乎任何C代码都可以是C++代码,但是如果C++是C,而不是C,那么你的代码将是如此糟糕的风格,你不应该在问题上有C++标签。你的项目(1)只是一个在ANSI C项目(1)中甚至不可用的选项。应该初始化“迭代器”(旧的C含义,而不是C++含义)。声明迭代器有一个较新的C选项,甚至初始化它也是可选的。声明或声明和初始化都可能发生在for循环之前。
    for(q = &labelptr; *q; q = &((*q)->nextlabel)) {
    
    for(q = &labelptr, count=0; *q && count< MAXTUBES; q = &((*q)->nextlabel), count++)
    
    for (initializer;  test;  update)
        body;
    
    initializer;
    while (test) {
       body;
       update;
    }
    
    for (q = &labelptr;  *q;  q = &((*q)->nextlabel))
    
    for (q = &labelptr, count=0;
         *q && count < MAXTUBES;
         q = &((*q)->nextlabel), count++)