文档库 最新最全的文档下载
当前位置:文档库 › 学习C语言指针应注意的几个问题

学习C语言指针应注意的几个问题

龙源期刊网 https://www.wendangku.net/doc/8b3558380.html,

学习C语言指针应注意的几个问题

作者:张尔谦

来源:《科教导刊·电子版》2015年第32期

摘要指针是C语言中的一个重要概念。指针的引入增强了C语言的灵活性和高效性,同时由于指针的用法过于灵活也使得初学者经常感到难以驾驭,甚至经常出现理解错误和应用错误。本文对学习C语言指针应注意的几个问题进行了探讨。

关键词指针空指针 C语言

中图分类号:TP312.1-4 文献标识码:A

指针的引入增强了C语言的灵活性和高效性,同时由于指针的用法过于灵活也使得初学者经常感到难以驾驭,甚至经常出现理解错误和应用错误。笔者认为初学C语言指针应注意以下几个问题。

1正确理解定义指针基类型的必要性

指针变量是存放地址的,但在定义指针变量时必须指明其基类型。例如:对指针变量p的定义(char * p;)这里的char即是指针变量p的基类型,也就是说定义p为指向字符型数据的指针类型。

在定义指针时指明其基类型是非常有必要的。虽然C语言中允许定义通用指针类型

(*void类型),但这种通用类型应被理解为指向空类型的数据或不能指向确定类型的数据,而不应被理解成可以指向任何类型的数据。在具体使用通用类型的指针时一般要通过显式强制类型转换将其转换成一个有确定类型的指针。例如,在C语言中通常利用malloc函数(该函数的原型为:void* malloc(unsigned int size);)来实现内存的动态分配。该函数的返回值就是一个通用型指针,该指针不指向任何特定数据类型的数据,它只是返回malloc函数所分配

的内存空间的第一个字节的地址。在真正利用这段内存空间存储数据时,一般还要通过显式强制类型转换将其转换成一个有确定类型的指针,例如:p=(int*)malloc(100*sizeof (int)),这样就在内存中开辟出了能存放100个整型数字的空间,而基类型为整型的指针p 指向这段内存空间的第一个字节。

C语言初学者普遍存在一个疑惑,那就是既然指针变量中存放的是内存地址,为什么还要设定类型,内存地址只不过是一个数字难道还有类型之分吗?必须为指针变量设定类型的原因有二。(1)不同数据类型的数据在内存中占据的存储空间的大小不同,比如一个整型数需要占用4个字节而一个字符只需占用1个字节。如果不指定指针的类型,通过指针引用该指针所指向的变量时,就无从知道应该取从该指针所指向的内存地址开始的几个字节的数据;(2)在指针进行加减运算时,如果不指定指针的类型,就无法判断指针具体应该加减的数值。例如

相关文档