学习报告(九)
链表
与可变数组有相似的地方,但是比可变数组占空间小。
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的内存是安全的,但是容易造成问题。最好的做法是返回传入的指针。
不要使用全局变量在函数间传递参数和结果
使用全局变量和静态本地变量的函数是线程不安全的。