while(*tail)+tail++;tail--;
时间: 2024-06-13 11:05:39 浏览: 130
这段代码是一个指针操作,它的作用是将指针tail指向字符串的末尾。具体来说,它首先判断tail所指向的字符是否为'\0',即字符串的结束符,如果不是,则将tail指向下一个字符,直到找到'\0'为止,最后将tail指向字符串的末尾。这段代码的效果等同于使用strlen函数来计算字符串的长度,但是它的实现方式更为简单粗暴。
```c
char *tail = "hello world";
while (*tail) {
tail++;
}
tail--;
```
相关问题
while(*tail)++++tail+++++++tail--
这段代码是一个while循环,它的条件是指针tail所指向的值不为0。循环体中,tail指针先自增1,然后再自增若干次,具体次数取决于tail所指向的数据类型。最后,tail指针再自减若干次,同样取决于数据类型。这段代码的作用是将tail指针指向的数据向右移动若干个字节,具体移动的字节数取决于数据类型。
代码示例:
```c
while(*tail) {
tail++;
tail += sizeof(*tail);
tail -= sizeof(*tail);
}
```
Node *q,*p=L,*tail; while(p -> next != NULL) { p = p -> next; cnt++; } for(i=0; i<cnt-1; i++) { num = cnt - i - 1; q = L -> next; p = q -> next; tail = L; while(num--) { if( (q->data).age < (p -> data).age) { q-> next =p ->next; tail -> next = p; p -> next = q; } tail = tail -> next; q = tail -> next; p = q -> next; } }
这段代码是对链表进行冒泡排序操作。具体来说,是按照链表中结点中的年龄属性从小到大进行排序。
其中,`L` 是链表的头结点指针,`p` 和 `q` 分别为指向链表结点的指针。`cnt` 为链表中结点的个数,`num` 为冒泡排序中需要比较的结点对数。
首先,循环遍历链表,计算出链表中结点的个数 `cnt`。
然后,使用两层循环进行冒泡排序操作。外层循环从头结点开始遍历每个结点,共需要比较 `cnt-1` 次。内层循环从链表的第一个结点开始逐个比较相邻的两个结点的年龄大小,如果前一个结点的年龄比后一个结点的年龄大,则交换这两个结点的位置。
具体来说,内层循环中的 `q` 指向链表中需要比较的第一个结点,`p` 指向需要比较的第二个结点,`tail` 指向链表中 `q` 结点的前一个结点。在比较完 `q` 和 `p` 结点的年龄大小后,如果需要交换这两个结点的位置,则将 `q` 结点的 `next` 指针指向 `p` 结点的 `next` 指针所指向的结点,将 `tail` 结点的 `next` 指针指向 `p` 结点,将 `p` 结点的 `next` 指针指向 `q` 结点,完成两个结点位置的交换操作。然后,将 `tail` 指针指向 `q` 结点,`q` 指针指向 `tail` 结点的下一个结点,`p` 指针指向 `q` 指针的下一个结点,继续进行下一对结点的比较。
最后,当内层循环结束时,链表中年龄最小的结点就被移动到了头结点的下一个位置。然后,外层循环继续遍历链表,进行下一轮的冒泡排序操作,直到链表中所有结点按照年龄从小到大排序完毕。
阅读全文