相信使用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小时内删除。