没有合适的资源?快使用搜索试试~ 我知道了~
C语言学习心得——对多本C语言的总结性归纳
需积分: 9 14 下载量 64 浏览量
2011-06-10
14:51:13
上传
评论
收藏 145KB DOC 举报
温馨提示
试读
16页
通过翻阅多本C程序设计的书籍,将其中的经典语句以及经典的例子程序进行摘抄,并加上自己的一些感受和理解,希望多大家有所帮助
资源详情
资源评论
资源推荐
1. 建议不在必要时不要使用全局变量,原因如下:
(1)全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。
(2)使用全局变量过多,会降低程序的清晰性,人们往往难以清楚地判断出每个瞬时各个
外部变量的值。在各个函数执行时都可能改变外部变量的值,程序容易出错。因此,要限
制使用全局变量。
(3)它使函数的通用性降低了,因为函数在执行时要依赖于其所在的外部变量。如果将一
个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去。但若该外部变量与
其他文件的变量同名时,就会出现问题,降低了程序的可靠性和通用性。一般要求把C程
序中的函数做成一个封闭体,除了可以通过“实参——形参”的渠道与外界发生联系外,没
有其他渠道。
2. 数组作为函数参数
(1)数组元素可作函数实参
(2)数组名可作函数参数
(3)形参数组可不定义长度
3. 选择法排序
#include <stdio.h>
void main()
{ void sort(int array[],int n);
int a[10],i;
printf(″enter the array\n″);
for(i=0;i<10;i++)
scanf(″%d″,&a[i]);
sort(a,10);
printf(″the sorted array∶\n″);
for(i=0;i<10;i++)
printf(″%d″,a[i]);
printf(″\n″);
}
void sort(int array[],int n)
{ int i,j,k,t;
for(i=0;i<n-1;i++)
{ k=i;
for(j=i+1;j<n;j++)
if(array[j] < array[k])
t=array[k];
array[k]=array[j];array[j]=t
}
}
将 array[k]当做最小值,然后将 array[j]与其比较,如果小于 array[k],就交换两个的值
4. 当外部和局部同时定义一个相同并且赋值了的变量,一般都会先使用局部的哪个变量.
#include <stdio.h>
int a=3,b=5; /* a,b 为外部变量*/ a,b 作用范围
void main ( )
{ int a=8; /*a 为局部变量 */ 局部变量 a 作用范围
printf (″%d″, max (a,b)); 全局变量 b 的作用范围
}
max (int a, int b) /*a,b 为局部变量 */
{ int c;
c=a>b?a∶b; 形参 a、b 作用范围
return (c);
}
运行结果为 8
5. 对静态局部变量的说明:
(1) 静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间
都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储区空间而不占
静态存储区空间,函数调用结束后即释放.
(2) 对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以
后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。而对自动变量赋
初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,
相当于执行一次赋值语句。
(3) 如在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对
数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一
个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配
存储单元,而所分配的单元中的值是不确定的。
(4) 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的。
6. 用 extern 声明外部变量
外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程
序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。编译时将外部变
量分配在静态存储区。
有时需要用 extern 来声明外部变量,以扩展外部变量的作用城。
7. 用 static 声明外部变量
有时在程序设计中希望某些外部变量只限于被本文件引用,而不能被其他文件引用。
这时可以在定义外部变量时加一个 static 声明.
8. 关于变量的声明和定义
广义地说,声明包括定义,但并非所有的声明都是定义。对“int a;” 而言,它既是声明,
又是定义。而对“extern a;” 而言,它是声明而不是定义。一般为了叙述方便,把建立存储
空间的声明称定义,而把不需要建立存储空间的声明称为声明。显然这里指的声明是狭义
的,即非定义性声明。例如:
void main()
{extern A; /*是声明不是定义。声明 A 是一
个已定义的外部变量*/
…
}
int A;
9. 存储类别小结
(1) 从作用域角度分,有局部变量和全局变量。它们采用的存储类别如下:
局部变量 |自动变量,即动态局部变量
(离开函数,值就消失)
|静态局部变量(离开函数,值仍保留)
|寄存器变量(离开函数,值就消失)
|(形式参数可以定义为自动变量或寄存
器变量)
全局变量 |静态外部变量(只限本文件引用)
|外部变量
(即非静态的外部变量,允许其他文件引用)
(2) 从变量存在的时间(生存期)来区分,有动态存储和静态存储两种类型。静态存储是程序整
个运行时间都存在,而动态存储则是在调用函数时临时分配单元。
动态存储 |自动变量(本函数内有效)
|寄存器变量(本函数内有效)
|形式参数(本函数内有效)
静态存储 |静态局部变量(函数内有效)
|静态外部变量(本文件内有效)
|外部变量(其他文件可引用)
(3) 从变量值存放的位置来区分,可分为:
内存中静态存储区 |静态局部变量
|静态外部变量(函数外部静态变量)
|外部变量(可为其他文件引用)
内存中动态存储区:自动变量和形式参数
CPU 中的寄存器:寄存器变量
(4) 关于作用域和生存期的概念。从前面叙述可以知道,对一个变量的性质可以从两个方面
分析,一是变量的作用域,一是变量值存在时间的长短,即生存期。前者是从空间的角度
后者是从时间的角度。二者有联系但不是同一回事.
(5) static 对局部变量和全局变量的作用不同。对局部变量来说,它使变量由动态存储方式改
变为静态存储方式。而对全局变量来说,它使变量局部化(局部于本文件),但仍为静态存储方
式。从作用域角度看,凡有 static 声明的,其作用域都是局限的,或者是局限于本函数内(静态
局部变量),或者局限于本文件内(静态外部变量)。
10. 内部函数和外部函数
(1)如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在
函数名和函数类型的前面加 static。
(2)在定义函数时,如果在函数首部的最左端加关键字 extern,则表示此函数是外部函数,可供
剩余15页未读,继续阅读
xuzhanglijuanjuan
- 粉丝: 16
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0