指针数组的存放方法 二维数组指针计算公式?

[更新]
·
·
分类:互联网
3315 阅读

指针数组的存放方法

二维数组指针计算公式?

二维数组指针计算公式?

二维数组可以看成是指针的指针,比如b[2][5]它是一个2行5列的二维数组,也可以看成是二级指针,一级存放的是行指针,然后每个行指针里面其实又是指向了5个列元素。
*(*(b i) j),*(b i)是先取行指针,然后 j偏移到所要的列,然后*取值就得到i行j列的数据了

C语言中指针数组和数组指针、函数指针、指向函数的指针等等该怎么理解?

要理解这些问题首先需要理解什么是指针和指针变量。
在C语言中我们可以认为指针就是地址,不过是某一个具体内存单元的地址。
如我们在c语言中定义了一个int型变量a:
int a;
那么计算机就会给a分配4个字节的地址(在vc 中,在某些版本的c语言中,可能是2个字节)来存放a的值。由于在内存中每个字节都有一个地址,那么哪个地址是a的地址呢?我们不能同时用4个地址来表示a的地址吧,所以在c语言中,我们拿这块空间(4个字节)的第一个字节的地址当作变量a的地址,也就是首地址。
然后我们在定义一个指针变量,如:
int *p;
再用取地址运算符把a的首地址取出来赋值给指针变量p,如:
pampa;
现在指针变量p里存放的就是a的地址,我们就称p是a的指针。
所以,指针数组是什么?
就是一个数组里,每个数组元素都存放的是指针类型的值,也就是地址值。而不是基本数据类型,如:整型、实型、字符型。定义一个指针数组的方法如下:
int *pa[10]
其中pa是数组名称,10为数组大小。
那么,数组指针呢?
根据上面所说的,指针就是一块空间的首地址。所以,数组指针就是——数组的首地址。在c语言中,我们可以拿数组名表示数组的首地址。我们可以如下所示,将一个指针变量指向数组:
int a[10],*p
pa
当然,由于数组的第一个元素是a[0],所以a[0]的地址也是数组的地址,所以,我们也可以这样写:
pampa[0]
这样,我们就可以说,p是数组a的指针。
至于函数指针,就是指向函数的指针,因为在c语言中,函数实际是放在一段内存中的,所以只要我们找到了这段内存的起始地址,也就找到了函数,所以我们也可以拿一个指针变量,存放函数的首地址,从而让一个指针指向某个函数。
定义并使用一个函数指针的方法如下:
int fun(int x) /* 声明一个函数 */
int (*f) (int x) /* 定义一个函数指针 */
ffun /* 将fun函数的首地址赋给指针f */
或者使用下面的方法将函数地址赋给函数指针:
f fun
赋值时函数fun不带括号,也不带参数,由于fun代表函数的首地址,因此经过赋值以后,指针f就指向函数fun(x)的代码的首地址。
这个时候f就成为了指向函数的指针。
我们就可以像下面这样,直接通过指针来调用函数了:
c(*f)(a)/* 通过指针f来调用函数fun */
谢谢邀请,喜欢请关注我。