指针数组 与 指向指针的指针

来源:互联网 发布:linux双网卡绑定脚本 编辑:程序博客网 时间:2024/05/20 07:14
指针数组与指向指针的指针的区别:指针数组声明的是数组,数组里放的是指针;而指向指针的指针声明的是指针,只是这指针指向另一个指针。1.声明方式不同普通数组声明方式是 int arr[10]; 声明一个数组元素都是int型值的数组指针数组声明方式是 int* arr[10]; 声明一个数组元素都是int型指针的数组 数组中每一个元素都是一个指向int型值指针普通指针声明 int* p; 声明一个指向int型值的指针指向指针的指针声明 int** p; 声明一个指针 该指针指向的值是一个int型指针2.访问时二者不同,指针数组是通过数组获得指针,再由获得的指针获得变量,如:b=*p[2]是把数组p第三个元素作为指针由*取其所指变量的值赋给b。而b=**p是把指针p指向的指针所指变量值赋给b。3.指针数组至少有两个,常常是多个,可以用p++、p--获得下一个或上一个指针;而指针的指针只有1个,类似p++、p--的操作都是非法的。4.指针数组可以用size操作符获取数组元素个数,指向指针的指针获得的则是指针长度。sizeof(arr) == 10, sizeof(p)==4.指针数组的用法:

指针数组一般很少使用,最近在一个按键检测时偶尔使用,代码如下:

下面是一组x坐标信息,y坐标则是每一排都相等,所以y坐标可以共用,如果每个位置都用上下左右四个量表示,那么数据表则会庞大的多,而此方法用在数据量大的地方则可以大大节省制表所用的时间。

int _0[] = {20,60,110,160,210,260,310};//6列 7个位置

int _11[] = {10,60,110,160,215,270,320,370,425,475,530,580,635,685,740,790};//第一排17个按键 18个位置
int _21[] = {10,55,115,180,240,300,360,420,485,545,610,670,730,790};
int _31[] = {10,55,115,180,240,300,360,420,485,545,610,670,730,790};
int _41[] = {10,90,155,220,280,340,400,465,530,590,650,700,790};
int _51[] = {10,85,131,190,255,315,380,445,510,570,615,660,705,750,790};
int _61[] = {10,60,100,145,190,235,475,525,570,615,655,700,750,790};
int* _x1[] = {_11,_21,_31,_41,_51,_61};//int型指针的数组 数组中每一个元素都是一个int型指针
int _mun[] = {    sizeof(_11)/sizeof(int),    sizeof(_21)/sizeof(int),    sizeof(_31)/sizeof(int),
    sizeof(_41)/sizeof(int),    sizeof(_51)/sizeof(int),    sizeof(_61)/sizeof(int)    };

通过两个for循环的嵌套就可以将上面六个数组遍历一遍

int i,j,k;

for(i=0;j=0k=0;k<sizeof(_x1)/sizeof(int);k++)

{

  for(j=0;j<sizeof(_mun[k])/sizeof(int);j++,i++)

  {

    printf("%d,", _x1[l][j]);

  }

printf("\n");

}

printf("allmun=%d\n",i);

ok,这样就将每一个x坐标都打印出来了。


指向指针的指针则用处更多,用法的差别就好比数组跟指针的差别。

上述表就可以也用指向指针的指针来做:

将上面的代码

int* _x1[] = {_11,_21,_31,_41,_51,_61};//int型指针的数组 数组中每一个元素都是一个int型指针

改成如下代码

int ** _x1 = new int*[6];

_x1[0] = _11;

_x1[1] = _21;

_x1[2] = _31;

_x1[3] = _41;

_x1[4] = _51;

_x1[5] = _61;

这样就ok了,后面的用法也是一样,只是在最后需要将指针变量删除,调用delete[] _x1就可以了。

很明显这样的用法并不是很方便,不如用数组指针方便。


指向指针的指针主要用在动态的申请,当我们编程时并不知道具体个数时,或者个数在不同情况下会不同时,这时候就不是数组指针能解决问题的了,而是必须使用指向指针的指针。

指向指针的指针对应于二维数组,可以称之为二维指针。

更复杂的数据有可能会用到三维四维指针,比如一个树形结构。

指向指针的指针还有一个明显的用处,当我需要调用一个函数帮我创建一块内存时,而这块内存的大小是在这个函数中获得的,此时就可以传入一个指向指针的指针。

好吧,我承认写的很乱。


原创粉丝点击