浅析C语言中指针的应用

    谢忠东

    摘 要:指针是C语言的精华部分,也是C语言课程的重点和难点章节之一,在C语言编程中起着重要的作用。只有理解了指针并能灵活运用指针,才算真正学会了C语言。因此我们在C语言教学过程中应特别注意指针,引导学生正确灵活地应用指针,编制高效的程序,发挥C语言的优势。

    关键词:C语言;指针;函数;数组

    指针是C语言中一个重要的概念,是C语言课程的重点难点章节之一,也是C语言的精华部分,在C语言编程中起着重要的作用。利用指针可以编写灵活高效的程序。只有理解了指针并能灵活运用指针,才算真正学会了C语言。因此我们在C语言教学过程中应特别注意指针单元,引导学生正确灵活地应用指针,编制高效的程序,发挥C语言的优势。但由于指针是一种特殊的数据类型,概念较复杂,大多数初学者感到较难理解,使用不好反而会带来一些麻烦。

    1 理解指针概念

    在C语言中定义的任意变量,在内存中都占用一定的存储单元。存储单元的每个字节都对应一个编号(就好比酒店中设有很多间客房,每间客房都有对应的房牌号),此编号就是变量在内存中的存储地址。指针就是用来表示这些地址的变量。简单地说,指针就是地址。例如:int x;int *point;point=&x;;表示point为指针变量,存放变量x的地址;x就是指针变量point所指向的变量。假设x的地址为2016,则point所存储的地址即为2016。很多学生最初都存在这样的疑问:若2016是变量x的地址,那么要表示指针point存放变量x的地址是否可以这样赋值:point=2016。这是错误的,这个赋值语句中的2016表示是一个整型数据,不能表示地址。对于指针变量的赋值只能用取地址运算符"&"进行赋值,即:point=&x;;&x;表示变量x的地址。初学者还需注意:指针必须先赋值后使用,指针指向的变量类型必须和指针类型一致。

    2 区分定义指针变量的*和指针运算符*

    定义指针变量语句中的*是对指针变量的说明,如int *point表示定义point是一个指向int类型的指针变量。

    指针运算符*是一个单目运算符,必须和指针变量结合表示间接访问该指针指向的对象。如int x=50,*point=&x;;*point=60;第1个*表示定义point是一个指向x的指针变量,第2个*和指针共同组成表达式*point表示间接访问x,相当于给x重新赋值为60。

    3 指针与数组

    一个数组由若干个元素组成,每个元素都对应一个地址,C语言中定义数组的指针,是指向整个数组的起始地址,和数组名表示的地址相同。数组元素的指针是数组元素的地址。例如:char s[10];char *p;这里的数组名s就是数组的首地址,若赋值p=s,则p为指向数组s的指针,表示整个数组的首地址,s+3表示距离s后3个位置所在单元的地址。s[3]表示数组中第4个元素的值,即距离s后3个位置所在单元中的值,因此s[3]与*(s+3)等价。由于p也表示数组的首地址,p+3与s+3等价,因此p[3]与*(p+3)、s[3]、*(s+3)等价。需要注意的是,p是允许移动的,如p=p+2,表示p发生改变,变为指向元素s[2]的地址,此时p[3]、*(p+3)不再表示s[3]的值,而是与s[5]等价。而此例中的s只能表示数组的首地址,不能出现这样的赋值:s=s+2。

    4 指针与函数

    在指针与函数的关系中,有函数指针、指针函数、指针作为函数参数的三种常用形式。

    (1)函数指针

    函数指针是指向函数起始地址的指针,定义格式是:类型名 (*指针变量名)( );由于函数是一个整体,函数指针不能做自增、自减运算。

    (2)指针函数

    指针函数是表示指针的函数,其本质是一个函数,返回值是某一类型的指针,定义格式是:类型名 *函数名(参数列表);由于返回值是地址,因此类型一般都定义为int。

    (3)指针作为函数的参数

    函数的参数可以为字符型、整型、浮点型等数据,也可以是指针类型,它的作用是将变量的地址传递到另一个函数中。

    例如,有两个整型变量,m的值为55,n的值为66,若要交换m、n的值,使得m的值为66,n的值为55。首先我们以传值的方式构建函数:

    Void func_val(int x,int y)

    {

    t=x;

    x=y;

    y=t;

    }

    在调用函数func_val(m,n)后,发现m、n的值并没有被交换。因为函数调用时,将实参的值传递给形参,函数最终交换的值是形参x、y的值,并不是实参m、n的值。

    要想使函数对两个实参进行交换,必须使实参与赋值后的形参变量所处的地址是相同的。可以以指针的形式作为形参重新构建函数:

    Void func_addr(int *p,int *q)

    {

    t=*p;

    *p=*q;

    *q=t;

    }

    在调用函数时,必须将m、n地址传递给以指针形式表示的形参p、q,调用表达式应为func_addr(&m;,&n;),调用之后实参m、n的值被交换了。通过此例可以看出,指针作为形参可以改变实参的值,使函数构建的功能更加模块化。在C语言程序设计过程中,指针可能是实现某些算法的唯一方法。

    5 结束语

    C语言程序设计是国内外大学计算机课程中重要的课程之一,指针是该课程中非常重要的部分,也是难点之一。在理论学习了指针的各知识点后,还应鼓励学生在课后要多思考、多编程、多实践。

    参考文献:

    [1]杨智明.C语言指针使用分析[J].保山学院学报,2012.

相关文章!
  • 融资融券对日历效应的影响:来

    王璐摘 要:过去的研究表明,中国股市的运行效率受到政府监管与干预并存在非对称交易的现象。2010年3月31日,中国股票市场实行了融资融券

  • 农家电商

    杨旭民农货,网店。网店卖农货,农民当客服。如果把时间往前推上两三年,这都是让很多农民不可思议的事情。可如今,越来越多的农民已经成为

  • 公司治理、内部控制对盈余管理

    金玉娜柏晓峰摘 要:按照形成原因——作用机理——解决机制的路径,对抑制盈余管理有效途径的实证研究表明:机会主义偏误和技术性错误是盈余