浅谈C语言程序设计中指针应用
浅谈C语言程序设计中指针应用
摘要:该文从指针的概念、运算、使用、灵活应用时应注意的事项等方面对C语言指针进行浅析和探讨。指导学生如何应用指针。
关键词:C语言;指针;指针变量;地址
中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)02-0389-03
Discuss Application Of The Pointer in C Language Program
HU Xiao-yan,PANG Run-fang
(Engineering & Training Center Inner Mongolia University of Seicence and Technology, Baotou 014010, China)
Abstract: In this paper,the concept of pointer,pointer arithmetic,pointer of use, flexible application should pay attention to in terms of C language pointer analysis and discussion. Guide the students how to use the pointer.
Key words: C Langwage; Pointer; Pointer Variables; Address
《C语言程序设计》课程是我校理工科非计算机专业学生进入大学所接触的第一门计算机语言课程。实践证明,该门课程对于初学者来说难度比较大,这也是由于C语言的特点决定的。因为C语言功能强大,它既有高级语言的特点,也有低级语言的特点。而在这门课程中指针又是C语言的精华,因此灵活地应用指针,可有效地表示复杂的数据结构、动态分配内存、方便地引用字符串和数组;在进行函数调用时还可获得多个返回值,并可直接处理内存地址,实现其它高级语言难以实现的功能;运用指针编程是C语言最重要的风格之一。但指针比较难以掌握,使用时常犯一些错误,即使是熟练的程序员也很难发现和排除这些错误。为了设计出高效、简洁、紧凑的用户程序,正确理解和使用指针非常重要。因此如何引导学生学会C语言的指针在编程中应用是很重要的事情。
1指针的概念
计算机对信息的处理都由操作系统调入存储器存放并执行,存储器中有众多的存储单元,存储单元是用来存放数据的。存放在存储单元中的数据称为存储单元的内容(或值)。计算机为了对存储单元进行有效的管理,便为存储单元进行编号(以字节为单位),这个编号就是“地址”,这个“地址”又称为指针[1]。每个变量都有一个地址。不同数据类型的变量,占用的字节数不同,系统把变量占据存储单元的第一个字节的地址作为该变量的地址。有了地址我们就可以引入指针变量。指针变量是一种特殊的变量,变量中存放的不是某种数据类型的数据,而是存放另一个变量的地址。如果一个指针变量存放了另一个变量的地址,则形象地称指针变量指向那个变量。下面提供一个指针的例题,通过分析例题来理解指针的概念。
例:利用指针,求两个整数的和。main()
{ int i,j,sum;
int *p,*q;/*定义指针变量*/
p=&i;q=&j;/*建立关联*/
scanf(“%d,%d”,p,q);
sum=*p+*q;/*使用指针变量*/
printf (“%d,%d\n”,*p,*q);
printf(“和= %d\n”,sum);
}
在程序当中,首先定义两个普通变量i,j,再定义两个指针变量p,q,为了进行区分普通变量和指针变量,所以在指针变量名前加’*’号。不能引用没有赋值的指针变量,否则可能会造成系统瘫痪,所以将&i赋值给p,&j赋值给q,说明指针变量指向了普通变量。如图所示:
有了指向关系,在输出语句中就可以利用指针来访问普通变量i,j。
2指针的运算
指针变量和其他变量一样,也可以进行运算,由于指针的运算实际上是地址的运算,所以和其它变量的运算又有区别[1]。
1)间接访问运算
用变量名对其所对应的存储单元的内容进行读写称为直接访问,而通过存储单元的地址对其内容进行读写的则称为间接访问。尽管指针变量中保存的是存储单元的地址,而引入指针的目的主要是为了更方便快捷地访问存储单元的内容。
间接访问是在引用的指针变量前面加一个“*”号,用来表示指针所指向的存储单元的值或内容。例如:
int a=5, *p;
p=&a;
printf("%d",*p);
当指针p指向a后,若用指针p访问所指存储单元的内