当前位置:首页 期刊杂志

C语言指针的综合应用研究

时间:2024-07-28

蒋玲玲

(武汉船舶职业技术学院,湖北 武汉 430050)

C语言指针的综合应用研究

蒋玲玲

(武汉船舶职业技术学院,湖北 武汉 430050)

C语言是一门优秀的语言,其在多个领域都有着很好的应用。指针是C语言的精华所在。本文阐述了指针的概念,对指针的常见类型进行了分析,并对指针的运算和相关应用做了详细的实例讲解,有效引入了指针对数组和函数的调用,对具体问题进行了讲解。

C语言;指针;应用

1.引言

在常见的高等编程语言中,C语言是一种基本的语言,涵盖数据类型多种多样,其精华是指针,可以巧妙地实现数据结构的复杂形式。C语言在编程中的使用频率很高,甚至成为针对某一问题解决的必要方法,同时,可以借助指针对功能大幅度提升代码的执行效率。所以,C语言中指针使用的灵活与否,成为衡量C语言编程功底的重要指标之一。

2.指针的概念

存储器是计算机硬件设备中存放数据的组成部分,通常存储器中的一个内存单元就是一个字节。数据类型不同,其所占的内存单元、字节数也不同。占两个单元的数据类型有整型,占一个单元的数据类型有字符型。给每个内存单元进行编号,可以有效、准确地访问此类内存单元。可以依据内存单元的编号迅速查找相应的内存单元。地址是内存单元的别称。指针就是地址,按照指针就能找到需要访问的内存单元。

3.指针类型概述

3.1 指针的基本类型

简单的数据类型是基本的类型指针,常见有整型、字符型和实型。

比如:int*t;

Int t1;

T=&t1;

这个例子,对整型数据指针t和整型变量t1进行定义,然后把整型变量t1的地址单元对整型数据指针T进行赋值。

3.2 对数组进行指向的指针

此类指针对一个数组进行指向,类型即为数组,可以指向一维、二维甚至多维数组。

比如:int shu[6];

Int*t1;

T1=str;

这个例子,对整型的一维数组str进行定义,还对整型数据指针t1进行定义,接着又把数组名shu赋值给指针t1,数组名shu表示一维数组中第一个元素shu[0]的地址,也就是数组的首地址,此例子把数组shu的首地址赋值给整型指针T1。

3.3 二级指针

二级指针是指针变量指向是某一个指针的地址。比如:Int defen;Int*t1;int**tt;t1=&defen;Tt=&t1;

这个例子对整型变量defen进行了定义,对整型指针t1进行定义,然后对二级指针tt进行定义,接着把整型变量defen的值赋值给一级指针t1,整型变量defen的首地址存放在t1中。最后一步,把一级指针t1的地址对二级指针tt进行赋值。以此类推,也可以把二级指针tt的地址赋值给三级指针,甚至多级。

3.4 指向函数的指针

指针指向函数的首地址的指针就是指向函数的指针。所以,可以借助调用指针变量来对函数进行调用。

比如:#include〈stdio.h〉

int max(int x,int y){return(x〉y?x:y);}

int main()

{

int(*ptr)(int,int);int a,b,c;ptr=max;

scanf("%d%d",&a,&b);

c=(*ptr)(a,b);

printf("a=%d,b=%d,max=%d",a,b,c);

}

此函数定义了整型指针,通过对指针的运用来调用函数。

3.5 指针数组

由指针变量组成的数组叫做指针数组,就是说,数组的每一个组成元素都是指针。

比如:int(*t)[6];

int shu[6];

t=shu;

这个例子中,对指针t进行了定义,这个指针指向数组shu,该数组由6个元素组成,每个数组的元素都是整型变量。整型数组shu拥有6个数组元素。然后shu赋值给t,整型数组shu的地址赋值给了整型数组指针t。赋值的左右两端保持一致性。

4.指针的运算和相关应用

4.1 指针的相关运算

(1)运算符号&用于取地址,对数组元素和变量进行取地址,同时,要对元素和变量的类型加以注意。

(2)“=”赋值运算符、“*”取内容运算符。

把和指针变量的定义中相同的变量类型的指针变量赋值,不允许常量值和变量值。对指针指向的部门变量取值可以用取内容运算符“*”。对于指针指向的目标的数据类型要注意,并非所有的目标变量的值都能取出来。

(3)++、--以及算数运算符和比较运算符

对简单变量进行指向对指针进行++、--运算,实际上没有意义,有些不对的指针运算会造成错误的结果。

4.2 指针、指针数组以及函数的运用

下面通过实际案例来强化数组、函数中指针对应用。比如:对于一批字符按照从大到小的方式排列。为使测序的功能形成模块,使用函数实现一定功能,来强调函数中指针的应用。在主函数中,对字符指针数组进行定义char*shu[],各元素值用各字符串对指针来初始化,不同串的首个指针由各元素分别指向。

排序的思路:函数sort可以用来排序,按照从大到小的原则对一批字符串进行排序,指针数组的各元素shu[0]—[4]以此存储字符串的首指针。函数out对元素shu[0]—[4]进行输出,并指向字符串,这就是字符串排序后的情况。程序为:

int slen(char*u){char*s=u;while(*s)s++;

return(s-u);}

/*这个函数对任意字符数组求长*/

int scmp(char b[],char*c)/*这个函数对字符串b和c的大小进行比较*/

{while(*b==*c&&*b&&*c)b++,c++;return(*b-*c);}

void out(char shu[])/*对所有字符串进行输出*/

{char**q=shu;/*q指向指针数组shu的首个元素地址*/

while(q〈shu+5){printf("%shu[%d,%q] ",*p,slen(*q),*q)}

q++;}/*指针q指向指针数组shu的下一个元素是q++ */

printf(" ");}

void sort(char*r[],int n)/*指针数组作为形参,用选择排序法对字符串进行从大到小的排序*/

{char**q,**r,**u*w;/*这几个指针变量的作用和类型要引起重视*/

for(q=s;q〈s+n-1;q++,l++)/*控制某一个串指针对应的元素,q开始指向首元素(shu≤q≤shu+3)*/

{u=q;/*q、u开始指向每一次循环比较的起始字符串对应的元素*/

for(r=q+1;r〈s+n;r++)/*r控制其余串指针所对应的元素,也就是说比较次数,(q+1≤r≤t+4)*/

if(scmp(*u,*r)〈0)u=r;/*比较u、r所指元素所对应的串,使u指向大串对应的元素*/

if(u!=q)w=*q,*q=*u,*u=w;/*交换r、u所指元素的值(对应串的存储地址),进行排序*/

}/*排序前后分别输出字符串,以此进行比较*/

函数、数组中指针的应用解读:sort是常用的字符串排序函数,该函数参数是指针数组,字符串个数用n表示。运用指针指向数组的相关运算,对字符串进行从大到小的排列。q、r是二重指针,对排序外部循环进行控制。外部循环的控制变量q对比较次数进行控制,也对每一轮第一个元素进行控制。shu≤q≤shu+3。变量r是内循环变量,对每次比较的次数进行控制。对其余字符串指针元素进行存储。q+1≤r≤shu+4。先用二重指针q、u指向每一轮第一串指针对应的元素,再进行内循环。内循环对某个串和其余串进行两两比较,每一次结束后,二重指针u指向大字符串。结束内循环后,把u指向对元素对值交换每一次循环对第一个元素的值。对元素值进行交换,其实是对两个串的存储位置进行存放。进行完所有字符串的排序后,元素shu[0]—shu[4]里面存储进行完排序对字符串对应的第一个指针。

这个实验中,都是借助相应的指针或者指针变量的相关运算实现对循环的控制和对数组的操作。

5.结语

C语言中的精髓是指针,指针的优势在对数组及函数的控制中发挥的淋漓尽致,可以提升运算和执行效率,准确地实现复杂的功能,可以应用在较为系统的程序系列中。

[1]李俊萩,赵家刚,张晴晖.C语言指针教学中的知识点分析与总结[J].计算机教育,2011(8):55-61.

[2]邱建林,刘维富,顾晖,等.C语言程序设计教学的研究与实践[J].电气电子教学学报,2003,25(4):96-98.

[3]孙玉霞.C语言程序设计中若干问题的探讨[J].沈阳航空工业学院学报,2004,21(3):52-54. [4]高阁.C语言指针教学的研究与探讨[J].机电产品开发与创新,2010,(1):185-186.

[5]胡建荣,罗杰红.高职C语言程序设计课程实践教学体系的设计[J].计算机教育,2010,10:150-152.

[6]吴朝海.对一个错误使用C语言指针程序的剖析[J].青海师范大学学报:自然科学版,2004(3):45-46.

Application of C Language Pointer

Jiang Lingling
(Wuhan Institute of Shipbuilding Technology,Wuhan 430050,Hubei)

C language is used widely in many fields.The pointer is the essence of Clanguage.This paper expounds the concept of pointer and its common type,than explains the arithmetic and related applications of pointer in details with cases.The calls for array and function by pointer are also explained.

Clanguage pointer;application

蒋玲玲,女,江苏宜兴人,本科,讲师,研究方向:计算机应用。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!