相信使用C语言的人都知道goto语句,就是一个跳转语句,相信很多人也用过。
下面是一条普通的跳转语句:
......
goto label;
......
lable:
......
相信大家都使用过,但标签地址,相信就不是很多人都用过了。
什么是标签地址,说简单了就是标签的地址,标签也有地址的。而获得标签的地址
就要使用&&符号获得,并且这个地址要存储在一个空(void)类型的指针中。下面举
一个例子来说明如果使用标签地址:
view plain <#>copy to clipboard <#>print <#>? <#>
1. /* gotoaddr.c */
2. #include <stdio.h>
3. #include <time.h>
4. int main(int argc,char *argv[])
5. {
6. void *target;
7. time_t now;
8. now = time((time_t *)NULL);
9. if(now & 0x0001)
10. target = &&oddtag;
11. else
12. target = &&eventag;
13. goto *target;
14. eventag:
15. printf("The time value %ld is even\n",now);
16. return(0);
17. oddtag:
18. printf("The time value %ld is odd\n",now);
19. return(0);
20. }
/* gotoaddr.c */ #include <stdio.h> #include <time.h> int main(int
argc,char *argv[]) { void *target; time_t now; now = time((time_t
*)NULL); if(now & 0x0001) target = &&oddtag; else target = &&eventag;
goto *target; eventag: printf("The time value %ld is even\n",now);
return(0); oddtag: printf("The time value %ld is odd\n",now); return(0); }
编译:gcc gotoaddr.c
执行:./a.out
我机子上的输出是这样的:
The time value 1264225490 is even
在上面的代码中,我们可以看到用时间来获得一个随机数now,然后根据now值的奇
偶性来跳转到不同的地方。
上面的例子是一种使用标签地址的普通用法,我们还可以把标签地址存入数组中,
然后根据数组索引的不同跳转到不同的地方,如下:
view plain <#>copy to clipboard <#>print <#>? <#>null官方更新地址
1. void *loc[] = { &&label1, &&label2, &&label3, &&label4 };
2. . . .
3. goto *loc[i];
void *loc[] = { &&label1, &&label2, &&label3, &&label4 }; . . . goto
*loc[i];
标签地址可以让我们更灵活的使用跳转语句 :)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论