天天看点

指针、函数和数组

    c语言的学习,比较难的是指针的用法,指针搞不明白,那说明没有学好c语言。

    下面将举例说明指针的一些用法,包括指针数组、数组指针、指针函数、函数指针和函数指针数组。

    1. 指针

    通常说所的指针是指针变量的简称,指针变量存放的是内存单元的地址,在32位处理器中地址是32位的,所以所有类型的指针都占32位即4字节。

    一级指针存放非指针变量的地址,二级指针存放一级指针变量的地址。

    下面来看一段程序:

    数组名a代表&a[0],是一个地址常量,对数组的操作本质是对指针的操作。i[a]这种写法也是可以的,i[a]等价于*(i+a),即*(a+i)。

    2.指针数组

    我们来看一个程序

    数组a和数组p的区别在于数组a的每个元素都是整型变量,而数组p的每个元素都是整型指针变量。

    给元素赋值: 

    数组p的每个元素存放数组a的元素的地址。

    编译运行程序的结果是:

    3. 数组指针

    先看一个程序    

    这里p是数组指针,p指向的对象是具有10个元素的一维数组。注意p指向的对象一维数组,因此存放的必须是一维数组整体的地址,程序中的“p = &a”不能改为“p = a”,数组名代表首元素的地址,即a等价于&a[0]。

    程序运行结果:   

    现在我们来看看另外一个程序。   

    指针p指向的是一维数组,因此要把一维数组的地址赋给p,赋值语句“p=a”把二维数组a的首元素地址&a[0]赋值给p,a[0]是一维数组,这是正确的。可以把p等价于a使用,最后用6种方式输出二维数组a的所有元素,结果如下:

   4. 指针函数

    指针函数是指返回值是地址的函数,例如:  

    函数fun的返回值是整型指针。

    5. 函数指针

    函数指针是指向函数的指针,下面看一个程序。

     定义语句“int (*p)(int x, int y)”定义了p是指向具有两个整型参数,并且返回值是整型的函数的指针。然后把具有两个整型参数,并且返回值是整型的函数fun赋给p,这样p就指向函数fun的入口地址,使用时传入相应的参数。

    这个程序的运行结果如下:   

    6. 函数指针数组

    函数指针数组是多个相同类型函数指针的集合,下面看一个程序。

    定义语句“ int (*p[2])(int x, int y);”定义了一个函数指针数组,数据p有两个元素,p[0]是一个指向具有两个整型参数,并且返回值是整型的函数的指针。然后把具有两个整型参数,并且返回值是整型的函数fun1赋给p[0],这样p[0]就指向函数fun1的入口地址,使用时传入相应的参数。

继续阅读