typedef 的使用方法详解、goto语句的使用方法。

typedef

 

C语言支持一*种叫作typedef的机制,它允许你为各种数据类型定义新名字。typedef 声明的写法和普通的声明基本相同,
只是把typedef这个关键字出现在声明的前面。例如,下面这个声明:
char    *ptr_ to_ char;
变量ptr_ to_ char 声明为-一个指向字符的指针。但是,在你添加关键字typedef后,声明变为:
typedef       char        *ptr_ to_ char;
这个声明把标识符ptr_ to_ char作为指向字符的指针类型的新名字。你可以像使用任何预定义名字一样在下面的声明中使用这个新名字。

例如:ptr_ to_ char     a;
声明a是一个指向字符的指针。使用typedef声明类型可以减少使声明变得又臭又长的危险,尤其是那些复杂的声明'。而且,如果你以后觉得应该修改程序所使用的一些数据的类型时,修改-一个typedef声明比修改程序中与这种类型有关的所有变量(和函数)的所有声明要容易得多。
 

提示:
你应该使用typedef而不是#define来创建新的类型名,因为后者无法正确地处理指针类型。
例如:
#define d_ ptr_ to_ char
char    d_ ptr_ to_ char    a, b;
正确地声明了a,但是b却被声明为一个字符。在定义更为复杂的类型名字时,如函数指针或指向数组的指针,使用typedef 更为合适。

★用typedef定义类型的方法:

 ① 先按定义变量的方法写出定义体(如:int i)。

② 将变量名换成新类型名(例如:将i换成COUNT)。

③ 在最前面加typedef   (例如:typedef int COUNT)。

④ 然后可以用新类型名去定义变量。

goto

它的语法如下:
goto     语句标签;
要使用goto语句,你必须在你希望跳转的语句前面加上语句标签。语句标签就是标识符后面加个冒号。包含这些标签的goto语句可以出现在同一个函数中的任何位置。goto是一种危险的语句,因为在学习C的过程中,很容易形成对它的依赖。经验欠缺的程序员有时使用goto 语句来避免考虑程序的设计。这样写出来的程序较之细心编写的程序总是难以维护得多。

例如,这里有一一个程序, 它使用goto语句来执行数组元素的交换排序。

i=0:
outer_ next :
if(主>= NtUM ElEMENTS一1 )
goto outer_. end;
inner_ next :
if( j >= NUM_ ELEMENTS
qoto inner.. end;
if( value[i] <= value[j1 )
goto no_ ewap 1
temp
P =val
valueril
e[i];..
value{1] = value[j];
valuelj] = temp ;
no_ swap:
j+=1;
goto inner. next :
inner_ end:
+=1;
outer_ next ;
outer_ end:


这是-一个很小的程序,但你必须花相当长的时间来研究它,才可能稿清楚它的结构。下面是一个功能相同的程序,但它不使用goto语句。你很容易看清它的结构。
 

for( i= 0; i< NUM ELEMENTS- 1; i += 1 ){
for(j=i↓1;j< NUM_ELEMENTS; j += 1 ){
if( value[i] > value[j] ){
temp = value[i];
value[i] = value[j]:
value[j]一temp;
    }
}
quit;

但是,在一种情况下,即使是结构良好的程序,使用goto语句也可能非常合适一就 是跳出多层嵌套的循环。
由于break语句只影响包围它的最内层循环,要想立即从深层嵌套的循环中退出只有使用一一个办法,就是使用goto语句。如下例所示:

while( conditionl ) {
while( condition2 ) {
while ( condition3 ){
if( some disaster )
goto quit:
quit: ;


要想在这种情况下避免使用goto语句有两种方案。第一个方案是当你希望退出所有循环时设置一个状态标志 ,但这个标志在每个循环中都必须进行测试:
 

enum
EXIT,OK } status;
status = OK;
while( status == OK && conditionl ) {
while( status == OK && condition2 ) {
while ( condition3
if( some disaster ) {
status=EXIT;
break;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值