链表、本地变量

学习报告(九)

链表

与可变数组有相似的地方,但是比可变数组占空间小。

typedef struct_node{

          intvalue;

struct_node*next;

   }Node;

typedefstruct{

Node*head;

   }List;

  

   for( p= head; p; p=p->next ){

}(链表里一个比较经典的循环)

搜索

Ret = 0;

For ( p = head; p; p=p->next)

{    if ( p->value == I  )

{ ret = p;break;

}

   }

去除

remove(Node*r);

for( p =head; p; p=p->next ){

if( p->next ==r ){

}

}

 

for (q=0, p=head; p; q=p, p=p->next){

     if( p->value ==i){

          q->next=p->next;

     }

}

检查错误

任何一个指针在->的左边都应该被检查

清除

void clear(Node *head)

{

     if ( head->next )

clear(head->next);

free(head);

}

for ( p =head; p; p=q ){

q= p -> next;

free(p);

}

全局变量

定义在函数外面的变量是全局变量。

全局变量具有全局的生存期和作用域。它们与任何函数都无关,任何函数都可以使用它们。

全局变量初始化

(可以自动得到0但是局部变量不会必须人工初始化)

没有做初始化的全局变量会的到0值(指针会得到NULL值)

只能用编译时刻已知的值来初始化全局变量

它们的初始化发生在main函数之前。

如果函数内部存在与全局变量同名的变量,则全局变量被隐藏。

静态本地变量

本地变量定义时加上static修饰符就成为静态本地变量

当函数离开的时候,静态本地变量会继续存在并保持其值

静态本地变量的初始化只会在第一次进入这个函数时做,以后进入函数时会保持上次离开时的值

静态本地变量实际上是特殊的全局变量,它们位于相同的内存区域。静态本地变量具有全局的生存期,函数内的局部作用域。

static在这里的意思是局部作用域(本地可访问)

返回指针的函数

返回本地变量的地址是危险的,返回全局变量或静态本地变量的地址是安全的,返回在函数内malloc的内存是安全的,但是容易造成问题。最好的做法是返回传入的指针。

不要使用全局变量在函数间传递参数和结果

使用全局变量和静态本地变量的函数是线程不安全的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值