指针

来源:互联网 发布:linux samma 编辑:程序博客网 时间:2024/06/02 13:12
说明p是一个指向指针的指针,比如二维数组名。实际上这种用法很常见,例如我要声明一个m行,n列的整型数组就可以这样:int **p = new int*[m];for(int i = 0;i < m;i ++)   p[i] = new int[n];

1. 关于二级指针例如:char **p;这里定义了一个二级指针变量p,p是一个指针变量,毫无疑问在32位系统下占4个byte。它与一级指针不同的是,一级指针保存的是数据的地址,二级指针保存的是一级指针的地址,布局如下:

二级指针和野指针2.“数组参数”和等效的“指针参数”a. void fun(char a[3][4]); 等效为:void fun(char (*p)[4]);b. void fun(char *a[]); 等效为:void fun(char **p);

 

 

 

数组指针的定义

数组名的指针,即数组首元素地址的指针。即是指向数组的指针。

例:int (*p)[10]; p即为指向数组的指针,又称数组指针。

编辑本段数组指针与指针数组

数组指针是指向数组首元素的地址的指针,其本质为指针;

指针数组是数组元素为指针的数组(例如 int *p[3],定义了p[0],p[1],p[2]三个指针),其本质为数组。

数组指针的使用在某些情况下与指针数组很相似,要注意区别。

编辑本段二维数组指针

为了能更好地理解数组指针,与普通指针及二级指针的区别,下面举例说明一下。

例如:{int a[4][5];int (*p)[5]=a;}这里a是个二维数组的数组名,相当于一个二级指针常量;p是一个指针变量,它指向包含5个int元素的一维数组,此时p的增量以它所指向的一维数组长度为单位;p+i是二维数组a的i行的起始地址,*(p+2)+3表示a数组2行3列元素地址(第一行为0行,第一列为0列),*(*(p+2)+3)表示a[2][3]的值。

//(*p)[5]其中的5换成其他的数字在vc++6.0环境中都无法通过编译

(*p)[5]其中的5在上述例子中没有表示任何意思你可以换成除0以外的整数,[5]的作用就是帮助你记忆说你所指向的一维数组的长度。(不过除了与定义的二维数组的长度一致的不会警告之外 )其他的数会警告但是不影响结果。

原创粉丝点击