C++中的数组指针与数组引用
来源:互联网 发布:思维导图 mac版下载 编辑:程序博客网 时间:2024/06/06 01:38
C++中的数组指针与数组引用
1.数组指针
数组指针是一个指向数组的指针,它和指针数组不一样
数组指针是形如
char (*ptr)[3];
它表示一个指向元素数目为3的数组的指针
而指针数组是形如
char *ptr[3]={"a","b","c"};
它其实是一个数组,数组元素是三个指针
数组指针和一般指针的不同是指针的偏移量不同
拿一个二维数组来说
int arr[2][3];
可以把这个二维数组看成一个一维数组,这个一维数组的每个元素又是一个数组,那么可以用一个数组指针来指向这个一维数组的某个元素
int arr[2][3];int (*ptr)[3]=arr;
arr[2][3]可以看成是arr[2]这么一个数组,这个数组的元素又是一个大小为三的数组,此时用这个数组指针ptr指向arr[2]中的某个元素
int (*ptr)[3]=arr;
或者是
int (*ptr)[3]=&arr[1];
注意他们的下一层维度相同,不同会报错
#include<iostream>#include<string>using namespace std;int main(){ int arr[2][3]; int (*ptr)[2]=arr; return 0;}//[Error] cannot convert 'int (*)[3]' to 'int (*)[2]' in initialization
ptr指针的偏移量和一般指针是不一样的
(p为一般指针)
//32位 #include<iostream>#include<string>using namespace std;int main(){ int arr[2][3]; int (*ptr)[3]=arr; int *p=&arr[0][0]; cout<<"p偏移前 "<<p<<" p偏移后 "<<p+1<<endl; cout<<"ptr偏移前 "<<ptr<<" ptr偏移后 "<<ptr+1<<endl; cout<<"&arr[0]偏移前 "<<&arr[0]<<" &arr[0]偏移后 "<<&arr[0]+1<<endl; return 0;}
ptr和&arr[0]都是数组指针,加一后偏移3 * sizeof(int)字节
把ptr解引用后变成* (ptr),* (ptr)虽然和ptr值一样但是代表的意义不同
(ptr)+1后是偏移3 * sizeof(int)字节
*(ptr+1)后是偏移sizeof(int)字节
例如
#include<iostream>#include<string>using namespace std;int main(){ int arr[2][3]; int (*ptr)[3]=arr; cout<<"ptr偏移前 "<<ptr<<" ptr偏移后 "<<ptr+1<<endl; cout<<"*ptr偏移前 "<<ptr<<" *ptr偏移后 "<<*ptr+1<<endl; return 0;}
这一点类似于二维数组中的&arr,arr,arr[0]和&arr[0]
他们是数组指针,他们的值都相同,但是他们的偏移量不同
#include<iostream>#include<string>using namespace std;int main(){ int arr[2][3]; cout<<"&arr偏移前 "<<&arr<<" ptr偏移后 "<<&arr+1<<endl; cout<<"arr偏移前 "<<arr<<" ptr偏移后 "<<arr+1<<endl; cout<<"&arr[0]偏移前 "<<&arr[0]<<" *ptr偏移后 "<<&arr[0]+1<<endl; cout<<"arr[0]偏移前 "<<arr[0]<<" arr[0]偏移后 "<<arr[0]+1<<endl; return 0;}
其中&arr是一个指向arr[2][3]的数组指针
2.数组引用
对数组的引用
int arr[2][3]={1,2,3,4,5,6};int (&ptr)[3]=arr[0];//这样声明了一个引用数组//下一维度必须相同,否则报错int &ptr[3]=arr[0];//错误,没有引用数组
这样就可以通过
cout<<ptr[0]<<endl; cout<<ptr[1]<<endl; cout<<ptr[2]<<endl;
来访问数组arr[2][3]中的某一部分
访问的是arr[2][3]数组而不是它的拷贝
0 0
- C++中的数组指针与数组引用
- C中的数组与指针
- 引用数组,指针数组与数组引用,数组指针
- C语言中的数组指针与指针数组
- C语言中的指针数组与数组指针的理解
- 【C】指针、引用和数组
- C语言中的指针与数组
- c语言中的数组与指针
- C语言中的指针与数组
- C语言中的多维数组与指针
- C语言中的数组与指针
- C语言中的数组与指针
- C语言中的指针与多维数组
- C语言中的数组名与指针
- C语言中的二维数组与指针
- c语言中的指针与数组
- C语言中的指针与数组
- 引用、指针与数组名
- 欢迎使用CSDN-markdown编辑器
- sysctl -P 报错解决办法
- Windows+eclipse+Android+java+api+opencv使用需要注意的几点
- java 构造函数与继承
- OSGi介绍
- C++中的数组指针与数组引用
- MongoDB常见错误总结
- cocos2d-x 中添加显示文字的三种方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)
- AJAX学习笔记
- javascript异步代码的回调地狱以及JQuery.deferred提供的promise解决方案
- shell export 作用
- java要点笔记——IO流
- LeetCode || Reverse Bits
- iOS优化笔记