论文部分内容阅读
摘要:指针是C语言的精髓部分,也是C语言的重要特色。本文从指针的基本概念出发,结合具体实例对指针的类型进行了分析,并对指针在实际应用中常出现的问题进行了归类总结,希望对初学者理解“指针”这一重要概念有所帮助。
关键词:C语言 指针 数组 函数
指针是C语言中的精髓,它在C语言中被广泛的使用。理解和运用好指针可以灵活方便地处理程序中各种复杂问题,可以轻松完成其他高级程序设计语言不便完成的任务。
一、指针的概念
一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。
指针的引入为系统存取数据提供了一种“间接访问”方式。所谓间接访问,是先访问存放变量地址的存储单元,得到该变量的地址,再对变量内容进行访问。
指针变量是一种特殊变量。系统为指针变量分配一块连续存储单元不是供其存储数据,而是存储内存地址。因此,指针变量是存储内存地址的变量。
二、指针的类型
1、指向简单变量的指针。指针所指的数据类可以是简单的数据类型。
例:(1)int*p,i;p=&i;意思是指针变量指向整型变量i
(2)char*p,a;p=&a;意思是指针变量指向字符型变量a
(3)int*p,a[10];p=a;意思是指针变量指向数组a
2、指向数组的指针。指针所指的数组既可以是一维数组,也可以是多维数组。
例:main()
{inta[4]={2,4,6,8};
int*p;
for(p=a;p printf(“%2d”,*p);}
分析:指针p指向了a数组的首地址,通过p++来访问a数组的每一元素。
3、指针数组。数组元素是由指针变量组成的一种指针。定义如:int*p[2];指针数组p包含两个元素,每个元素指向一个整型数据。
例:main()
{int*p[2],i,a[2][2]={1,3,5,7};
for(i=0;i<2;i++)
p[i]=a[i];
printf("%d\n",*(p[1]+1));}
分析:指针p是一个数组,通过for循环语句给指针数组中的每个指针变量赋值,p[1]的初值为数组a的第二行的首地址,*(p[1]+1)便是元素a[1][1],因此程序输出7。
4、指向指针的指针。指针变量指向的是指针的地址,定义如:int**p。
例:main()
{inta[2][2]={1,3,5,7};
int*p[2],**q,i;
for(i=0;i<2;i++)
p[i]=a[i];
q=p;
printf("%d\n",*(*(q+1)+1));}
分析:指针数组p的各个指针变量指向数组a的各行首地址,q指向指针数组p的首地址,*(q+1)等同p[1],如此,*(*(q+1)+1)便等同*(p[1]+1)也就是a[1][1],因此程序输出7。
5、指向函数的指针。指针变量指向函数的首地址,然后通过该指针变量调用该函数。定义如:int(*p)()。
例:intmax(inta,intb)
{return((a>b)?a:b);}
main()
{intmax(int,int);
int(*p)();inta,b;
p=max;scanf("%d,%d",&a,&b);
printf("max=%d\n",(*p)(a,b));}
分析:int(*p)()表示定义了一个指向函数的指针变量,函数名max代表了函数的入口地址,执行p=max后,p指向了函数max,(*p)(a,b)便是通过p调用函数max。
6、指向文件的指针。C语言对文件的操作并不是直接通过文件名进行的,而是根据文件名生成一个文件指针,通过该指针来对文件进行操作.定义如:FILE*fP;(fp为文件指针,此时fp不指向任何文件)。
三、指针应用中常见的错误
1、把数据赋给指针变量。指针在使用前必须进行初始化,赋予指针的值必须是地址。
例:main()
{inti=6,*p;p=6;
printf“(*p=%d\n”,*p);}
正确语句:p=&i;“&”是一个取变量地址的运算符。
2、指针常量运算错误。程序中常量指针是不能被修改的。典型有数组名指针常量和指向字符串常量的指针。
例:main()
{inta[5]={1,2,3,4,5},*p;p=a;
printf“(%d\n”,*(++a));}
正确语句:printf“(%d\n”,*(++p));
3、指针赋值类型不一致
例:main()
{int*p,a[3][3]={{1,2,3},{4,5,6},{7,8,9}};p=a;
printf(“%d\n”,*p);}
正确语句:p=a[0];或p=&a[0][0];如果一定把a赋值给p,必须先将a转换成整型指针类型,如:p=(int*)a;。特别是将多维数组赋值给指针变量时应注意类型匹配。
参考文献
[1]陈建辉,C语言指针探讨[M]·莆田高等专科学校学报,2001
[2]施冬梅,C语言指针教学中应注意的几个方面[M].镇江高专学报,2004
[3]赵森,李卓民,C程序设计[M].北京:冶金工业出版社,2005
本文受襄樊学院教学研究项目JY0813资助
关键词:C语言 指针 数组 函数
指针是C语言中的精髓,它在C语言中被广泛的使用。理解和运用好指针可以灵活方便地处理程序中各种复杂问题,可以轻松完成其他高级程序设计语言不便完成的任务。
一、指针的概念
一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。
指针的引入为系统存取数据提供了一种“间接访问”方式。所谓间接访问,是先访问存放变量地址的存储单元,得到该变量的地址,再对变量内容进行访问。
指针变量是一种特殊变量。系统为指针变量分配一块连续存储单元不是供其存储数据,而是存储内存地址。因此,指针变量是存储内存地址的变量。
二、指针的类型
1、指向简单变量的指针。指针所指的数据类可以是简单的数据类型。
例:(1)int*p,i;p=&i;意思是指针变量指向整型变量i
(2)char*p,a;p=&a;意思是指针变量指向字符型变量a
(3)int*p,a[10];p=a;意思是指针变量指向数组a
2、指向数组的指针。指针所指的数组既可以是一维数组,也可以是多维数组。
例:main()
{inta[4]={2,4,6,8};
int*p;
for(p=a;p printf(“%2d”,*p);}
分析:指针p指向了a数组的首地址,通过p++来访问a数组的每一元素。
3、指针数组。数组元素是由指针变量组成的一种指针。定义如:int*p[2];指针数组p包含两个元素,每个元素指向一个整型数据。
例:main()
{int*p[2],i,a[2][2]={1,3,5,7};
for(i=0;i<2;i++)
p[i]=a[i];
printf("%d\n",*(p[1]+1));}
分析:指针p是一个数组,通过for循环语句给指针数组中的每个指针变量赋值,p[1]的初值为数组a的第二行的首地址,*(p[1]+1)便是元素a[1][1],因此程序输出7。
4、指向指针的指针。指针变量指向的是指针的地址,定义如:int**p。
例:main()
{inta[2][2]={1,3,5,7};
int*p[2],**q,i;
for(i=0;i<2;i++)
p[i]=a[i];
q=p;
printf("%d\n",*(*(q+1)+1));}
分析:指针数组p的各个指针变量指向数组a的各行首地址,q指向指针数组p的首地址,*(q+1)等同p[1],如此,*(*(q+1)+1)便等同*(p[1]+1)也就是a[1][1],因此程序输出7。
5、指向函数的指针。指针变量指向函数的首地址,然后通过该指针变量调用该函数。定义如:int(*p)()。
例:intmax(inta,intb)
{return((a>b)?a:b);}
main()
{intmax(int,int);
int(*p)();inta,b;
p=max;scanf("%d,%d",&a,&b);
printf("max=%d\n",(*p)(a,b));}
分析:int(*p)()表示定义了一个指向函数的指针变量,函数名max代表了函数的入口地址,执行p=max后,p指向了函数max,(*p)(a,b)便是通过p调用函数max。
6、指向文件的指针。C语言对文件的操作并不是直接通过文件名进行的,而是根据文件名生成一个文件指针,通过该指针来对文件进行操作.定义如:FILE*fP;(fp为文件指针,此时fp不指向任何文件)。
三、指针应用中常见的错误
1、把数据赋给指针变量。指针在使用前必须进行初始化,赋予指针的值必须是地址。
例:main()
{inti=6,*p;p=6;
printf“(*p=%d\n”,*p);}
正确语句:p=&i;“&”是一个取变量地址的运算符。
2、指针常量运算错误。程序中常量指针是不能被修改的。典型有数组名指针常量和指向字符串常量的指针。
例:main()
{inta[5]={1,2,3,4,5},*p;p=a;
printf“(%d\n”,*(++a));}
正确语句:printf“(%d\n”,*(++p));
3、指针赋值类型不一致
例:main()
{int*p,a[3][3]={{1,2,3},{4,5,6},{7,8,9}};p=a;
printf(“%d\n”,*p);}
正确语句:p=a[0];或p=&a[0][0];如果一定把a赋值给p,必须先将a转换成整型指针类型,如:p=(int*)a;。特别是将多维数组赋值给指针变量时应注意类型匹配。
参考文献
[1]陈建辉,C语言指针探讨[M]·莆田高等专科学校学报,2001
[2]施冬梅,C语言指针教学中应注意的几个方面[M].镇江高专学报,2004
[3]赵森,李卓民,C程序设计[M].北京:冶金工业出版社,2005
本文受襄樊学院教学研究项目JY0813资助