c语言如何实现指针变量下移,C语言中指针使用技巧.doc

C语言中指针使用技巧

C语言中指针使用技巧

摘 要 指针使得C语言在编程的过程当中增加了灵活性,它让程序员可以直接和地址打交道,而不仅仅使用系统栈分配的地址。掌握指针的应用,可以使程序简洁、紧凑、高效。笔者在从事C语言教学中发现很多同学在学习指针时非常困难,对学习内容一知半解。笔者将从指针变量的定义及指针的应用方面阐述C语言中的指针。

关键词 C语言;指针;程序设计

中图分类号TP39 文献标识码A 文章编号 1674-6708(2011)56-0173-02

1 C语言中的指针简介

指针就是表示地址的一种变量,所以指针的范围严格来说只能是自然数的,并且不能在两个指针间进行加、乘、除这样的运算。由于在C语言中每个数据类型都必有存储空间,所以指针可以应用于几乎所有的数据类型中。所以,从这个角度出发可以将指针分为:指向变量的指针、数组指针、字符指针、指向指针的指针、函数指针、结构变量的指针以及文件指针等等。

其中,指向变量的指针就是存储变量的地址的。如 int * s这就是一个指向整型的指针,可以用于指向一个整型变量。如int a; 当p=&a时,就是将p存储整型变量a的地址。这是指针最简单的一种类型。所谓数组指针,就是指数组的名称实际上是指向整个数组空间的首指针。如 int a[10];其中a本质上是一个指针,指向该数组的第一个位置,a[2]表示距离a指向空间向后2个位置所在空间中的存放的值。所以,a[2]=*(a+2)。字符指针本质上是数组指针的一种特殊情况,就是存放字符串的数组所对应的数组名。指向指针的指针这是一类很特殊的指针,用于存放指针的一类指针,在本质上与指向变量的指针十分相似。例如 char *ss[N]={“java”,”sss”,’’rrr”}。指向函数的指针就是指向函数入口地址的指针。结构变量的指针这类指针和指向变量的指针很类似,主要的区别在于结构变量可能有多个类型不同的变量,所以一般空间较大。文件指针就是对文件进行操作的指针。从上述的分类可以看出无论什么类型的指针其功能都是一样的就是用于指向对象的地址空间罢了。

上面简要的介绍了指针的定义和分类,现在简要的论述一下指针涉及到的运算操作。首先由于指针是存放的变量地址的,所以第一个操作就是对指针进行地址赋值。如int a,*p;

P=&a,这就是对指针p进行进行赋变量a的地址,p指向变量a。当然也可以通过指针获取指针指向地址空间所存储的值。如int b=2,*p;p=&a,这是*p就表示p指向空间所存储的值,在本例中就是a的值2。为了能在数组指针中通过指针能访问到整个数组的值,所以。可以对指针进行加减整数值,表示地址的前移或后移。如int a[10],*p,*s; p=a;s=p+2;其中s 的值表示数组中首地址向前移动2的位置,表示 a[2]对应的地址。 为了表示两个地址间存在的距离,可以通过指针间的减法实现。当然指针涉及到的还有其他运算,现不详述了。

2 C语言中的指针算术运算

指针可以加上或减去一个整数,这和c语言中的算术表达式意义是不同的。例二:

(1)int a[20]; (2)int *ptr=a; (3)……… (4)ptr++;

在上例中,指针ptr的类型是int*,它指向的类型是int,他被初始化为指向数组a的起始地址,接下来的第4句中,指针ptr被加了1,编译器编译程序时把指针ptr的值加上了sizeof(int)。

由于int型在32位机中的长度是4个字节,故原来ptr指向数组第0号单元开始的四个字节,此时指向数组从第4号单元开始的4个字节。

3 运算符&和*

&是取地址运算符,*是指针运算符或称为间接访问运算符。&a的运算结果是一个地址,即变量a的地址。*p为指针变量p所指向的存储单元的内容,即p所指向的变量和值。下面举例说明。例三:

int a=12;

int b;

int * p;

int * * ptr;

p=&a; /*把变量a的地址赋给指针变量p。 */

*p=24; /*把24赋给指针变量p所指向的存储单元的内容 */

ptr=&p; /*把指针变量p的地址赋给指针变量ptr。*/

*ptr=&b; /*把变量p的地址赋给指针变量ptr。 */

* *ptr=34; /* *ptr的结果是ptr所指向的存储单元的内容,即变量b的地址,再做一次*运算,结果就是一个int类型的变量。*/

4 C语言中的指针应用

在C语言中指针的十分应用广泛,除具有一般的功能外,具体特殊功能的应用总结起来有三个方面:一是用于在函数中可以返回多个值;还有就是可以实现动态调用函数;最后就是实现数组的动态定义。其中,由于由

你可能感兴趣的:(c语言如何实现指针变量下移)