c++ 指针和数组

来源:互联网 发布:金山特大网络诈骗团伙 编辑:程序博客网 时间:2024/05/12 01:38

本章主要介绍c++常用的指针,包括基本类型指针,数组指针,函数指针,数组指针等。

                             常用的数组,包括基本类型数组,函数数组,指针数组等。

1.基本类型指针

如:int* s;//该指针表示只向一个int型数据的指针,内存里存放的是某个int型数据的地址,(任何指针类型在32位系统中占4个字节)

int a; //a在栈里存放

       s=&a;//s里存放的是变量a的地址

   基本类型数组

       如:int b[7];//b表示一个装有7个int数据元素的数组,定义数组时,明确数组的长度

数组名表示的是数组首元素地址,也就是上面,b,&b,&b[0]的值是一样的。虽然值是一样的,但是表达的意思还是不同,b(数组名)和&b[0]表示的意思一样,都表示数组首元素的地址,而&b表示的是该数组的地址。

int* t = b;

int *t1 = &b[0];

//这两种写法都正确,因为数组首元素是int类型,用指向int型的指针是正确的。

int* er = &b;//错误的,因为&b表示的是数组的地址,本例中应该用指向装有7个int型数据元素的数组指针才对。

int (* tr)[7];//定义一个指向装有7个int型元素数组的指针。(下面详细讲解)

tr = &b;//正确。

2.数组指针

如上例的:int (*tr)[7]; //这里定义的一个数组指针,指向的装有7个Int型元素数组的指针

理解方式:都知道int p[7]; p表示一个装有7个元素的数组,这里int (*tr)[7],用*tr替换p,*tr表示一个装有7个元素的数组,则tr表示的就是一个装有7个int型元素数组的指针。

指针数组(即存放指针的数组)

如: int* s[10];//这是一个简单的指针数组,s表示一个存放10个int型指针的数组。

理解方式:[](下标运算符)的优先级高于*运算符,s[10]表示存放10个元素的数组,*号表示存放的数据类型是否是指针。

3.函数指针

如: int (*p)(int a,int b)   //定义一个函数指针p,用于指向一个带两个int型参数,且返回值是int型的函数

int add(int a,int b)

{

return a+b;

}

p = add;     //正确赋值,函数名实际上就是函数地址

p(3,4);     //正确调用

   一般我们会用typedef int (*p)(int a,int b)  声明一个函数指针类型

p s;   //s表示的就是一个指向带两个Int型参数且返回值是Int型数据的函数

 函数指针数组

如: int (*p[2])(int a,int b);  //表示函数指针数组,p表示存放2个函数指针的的数组,且函数指针是指向带两个Int型参数且返回值是Int型数据的函数;

理解方式:都知道int (*)(int a,int b)声明带两个int型参数返回值是Int型数据的函数指针类型,而[]运算符的优先级高于*,int (*p[2])(int a,int b);p表示存有两个函数指针的数组.

 指向函数指针数组的指针

如:int (* (*p)[2])(int a,int b) ;  //p表示指向存有2个函数指针的数组。

理解方式:()优先级高,*p看成一个整体t,则int (* t[2])(int a,int b);t表示的是函数指针数组,所以p表示指向函数指针的数组


注意: 指针是针对内存的,指针的加减实际上是以指针所指类型为单位进行加减的