5.8 多级指针与多维数组
2016-06-13 08:58
197 查看
多级指针的概念
多级指针可对应于多维数组,这种指针变量中存的是另一个指针变量的地址,其说明如下:int val=10;
int *ptr=&val;
int **pptr=&ptr;
int ***ppptr=&pptr; //是多少级指针就有多少*号
这里val值为10,*ptr值也为10,**pptr的值和***ppptr的值均为10。注意这里的*号与定义中的*号意义不同,前者是指针说明符,后者是运算符,称间接引用运算符。
【例5.13】多级指针。
#include<iostream>
using namespace std;
int main(){
int val=66;
int *pval = &val;
int **ppval = &pval;
cout<<"val="<<val<<'\n'<<"**ppval="<<**ppval<<'\n';
**ppval=18;
cout<<"val="<<val<<'\n'<<"**ppval="<<**ppval<<endl;
return 0;
}
指针两要素
指向数组(元素)类型的指针,与一维数组名是等效的:int a[10], *pa =a;
则写pa[0] ,就是a[0];
*pa,即a[0];
*(pa+1) 和pa[1] ,都代表a[1]。
指针有两要素:地址和所指向目标的数据类型。a
与pa 两者都是一样的,所以pa 可以替代a。
二维数组与指针
二维数组是数组元素为一维数组的数组,所以等效的指针类型应该是指向一维数组的指针类型。如有:int x2d[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*pt)[4]=x2d;
则指针pt和x2d是等效的。它们表示的首地址一样,所指目标类型也一样,pt可以代替x2d,就象pa代替a一样。
指向一维数组的指针的定义如下:
数据类型
(* 指针变量名)
;
这里数组元素的个数n不可省略。因是指向指针的指针,称二级指针。
【例5.14】用指向二维数组基本元素的指针变量,和用指向组成二维数组的一维数组的指针变量输出二维数组全部基本元素。
#include< iostream>
using namespace std;
int main( ){
int a[3][6]={{1,2,3,4,5,6},{7,8,9,10,11,12},{13,14,15,16,17,18}};
int * ptr,i,j;
ptr=&a[0][0] ; //或 ptr = *a; 而不能ptr = a;
for(i=0;i<18;i++){
cout<<*(ptr+i)<<'\t';
if(i%6==5) cout<<endl;
}
cout<<endl;
int (* ptr1)[6]; //注意 ptr1是指向包含6个整型元素的一维数组的指针
ptr1=a;
for(i=0;i<3;i++){
for(j=0;j<6;j++) cout<<*(*(ptr1+i)+j)<<'\t';
cout<<endl;
}
return 0;
}
用指向数组元素的指针把数组传递到函数里,同时传递行列信息,就可以实现通用性。
相关文章推荐
- 数据分析师岗位
- mysql中查询字段为null或者不为null
- 连线(逻辑判断)
- 集合排序
- 5.7 字符串和string类
- [李景山php]每天laravel-20160828|McryptEncrypter-2
- C++语言笔试题目 C++中为什么用模板类&& 类中如何使用const &&函数重载,我们靠什么来区分调用的那个函数?靠返回值判断可以不可以
- Vim的文件加密
- 5.6 数组与指针的关系
- 5.5 this 指针
- YYCache 源码分析(二)
- POJ3342 Party at Hali-Bula(树形DP)
- 5.4 指针与地址
- java中hashcode()和equals()的详解
- 预测维护和预测分析
- IP进制转换
- 创业的真谛是顺势而为,借船过海!
- [李景山php]每天laravel-20160828|McryptEncrypter-2
- 装完DZ7后,打开ecshop首页出现:Warning: strpos() [function.strpos]: Empty delimiter
- YYCache 源码分析(一)