C语言程序设计课程教学探讨
- 格式:doc
- 大小:26.00 KB
- 文档页数:4
C语言程序设计课程教学探讨
摘要:指针是C语言中的重要语言元素,利用它可进行动态内存分配、直接访问内存及表示复杂的数据结构等操作。
作为指针中特殊的一类,空指针在程序设计的实践中具有不可替代的作用。
本文简要介绍了C语言中空指针的概念及用途,并对其相关特性及易混淆的相关概念进行了讨论。
关键词:C语言;空指针;NULL
1引言
指针在C语言编程中占有非常重要的地位,使用指针可对内存进行动态分配、直接访问内存以及表示复杂的数据结构等。
正确而灵活地使用指针可编写出优质的程序,可以说指针充分体现了C语言的优点。
但由于指针具有高度的灵活性,对它的完全掌握也较为困难。
在某些场合下会使用到一种称为空指针的指针,由于这种指针在程序中不以普通指针的形式出现,并没有对它进行显式的定义或赋值,所以常常被忽视,但作为指针的一类,空指针这一概念却是不应该被忽略或混淆的。
那么,什么是空指针呢?
2空指针的概念
空指针是一种不指向任何对象的指针,它的值为NULL。
NULL在中是这样定义的:
#define NULL0
或:
#define NULL 0L
也即是说,NULL的值是一个纯粹的零,这样,空指针就与普通指针有了区别:空指针的值是一个整型值,而普通指针值是不允许是整型值的。
但这个纯粹的零需要时可以被强制转换成void *或char *类型。
3空指针的用途
3.1用作函数调用失败时的返回值
某些函数的返回值是一个指针,若函数调用成功,返回一个指向某一对象的指针;反之则返回一个空指针。
很多C库函数在调用失败时的返回值就是一个指针,
如:
#include
main( )
{char *string[5];
int i=0;
while(inext;
++i; }
return(i);
}
在本例中,while循环的执行条件“p!=NULL”判断指针p是否移动到链表尾,若该条件不成立,表示已到链表最后一个元素,终止对链表的引用。
3.3用作main函数形参argv[ ]的结束警戒值
一般情况下main函数是不带参数的,但有时它可有两个形参:argc和argv[ ]。
一个带形参的main函数如下例:
#include
main(argc, argv)
int argc;
char *argv[ ];
{ int i=0;
while(argv[i]!=NULL)
{printf(“argv[%d]=%s\n”,i, argv[i]);
i++;}
}
其中argc是指在操作命令状态下执行main函数时命令行中参数的个数,argv[ ]则是一个指针数组,指向命令行各参数字符串的首地址。
若该函数编译后生成的可执行文件名为file,则可在操作命令状态下输入如下命令行:
filepara1para2para3
则argc的值为4(文件名也看作一个参数),argv[0]指向命令行中第一个字条串“file”,argv[1]指向“para1”,argv[2]指向“para2”,argv[3]指向“para3”,实际上还有一个argv[4],其值即为NULL。
该程序的功能是依次输出命令行中的各参数字符串,while循环体的执行条件是“argv[i]!=NULL”,该循环体执行四次依次输出命令行中四个参数字符串后,到达指针数组的最后一个元素argv[4],其值为空,循环终止。
4关于空指针的讨论
4.1空指针与void指针的区别
空指针与void指针是完全不同的,前面已经说明空指针是不指向任何对象的,而void指针却需指向某个对象,只是这个被指向的对象是不属于任何类型的,void 指针在需要时可与其它类型的指针互换。
void指针常用作指向函数的指针,而这对空指针而言是不可想象的。
4.2空指针的值是否总是为0
对于空指针的值是否总是为0这一问题,如果理解为“NULL与0比较,结果相等”,那么回答是肯定的,也就是说NULL总是等于0;但是如果将这一问题理解为“其存储方式总是与整型值0相同”,则并不一定,因为就存储方式而言,不同类型的“0”显然是不同的,所以程序中若在需要时将NULL的值强制转换成void *或char *类型后,其存储方式必然与整型的0不同了,一个字符型的0在内存中存放的是其ASCII代码的值(048),一般而言占用一个字节,而一个整型的0在内存中存放就是其本身的值(0),则所占字节数随编译系统的不同而不同,一般为两个字节,因此,在这种意义下则可说空指针的值并不一定总是为0。
4.3NULL与NUL的不同
前面在说明空指针的概念时已经知道NULL是在中定义的一个宏,其值为0或0L。
而NUL则是指ASCII中第一个字符----空字符’\0’,常用作字符串的结束标志,它并不是C语言中预定义的宏,它与NULL是完全不同的。
5结束语
在程序设计语言的发展历程中,C是一个重要的里程碑。
在面向对象、可视化、基于网络的程序设计语言占据主流地位的今天,C仍然是计算机专业和非计算计专业学生进入程序设计领域的重要基础。
指针是C语言中的一个极为重要的概念,全面正确地掌握指针是进行C语言程序设计的必备基础。
空指针虽然不像C语言中其它普通指针那样得到广泛的使用,但对其有一个明晰的概念,了解了它的用途后,对程序的阅读及实现某些编程技巧却是很有用的。
参考文献:
[1] 谭浩强. C程序设计(第三版)[M]. 北京:清华大学出版社,2005.
[2] [美]Tom Swan. 即学即用C语言[M]. 唐键,李凯,译. 北京:电子工业出版社,1995.。