数组分析
2016-09-06 14:44
190 查看
#include <iostream> using namespace std; void main(int argc, char* argv) { int arr1[6] = { 0, 1, 2, 3, 4, 5 }; //直接使用数组名 cout << "数组名代表指向数组第一个元素的指针:\n"; cout << "arr1:" << arr1 << endl; cout << "*arr1:" << *arr1 << endl; cout << "arr1[0]" << arr1[0] << endl; cout << "arr1+1:" << arr1 + 1 << endl; cout << "*(arr1+1):" << *(arr1 + 1) << endl; cout << "arr1[1]:" << arr1[1] << endl; // "说明数组名代表指向第一个元素的指针,步长为单个数组元素所占用的字节数\n"; //对数组名使用&进行取地址操作:"对数组名取地址意味取得指向该数组的指针,即得到的是指向‘整个数组’的指针:\n"; cout << "&arr1:" << &arr1 << endl; cout << "*(&arr1):" << *(&arr1) << endl; cout << "&arr1 + 1:" << &arr1 + 1 << endl; //由结果可以看到,&arr1 得到的地址跟直接使用数组名的地址是一样的,但是需要注意的是,对数组名‘取地址’操作以后所得到的地址只是值一样,他们都属于指向某一地址的指针(此处为指向数组首地址),但是其指针类型是不同的;直接使用数组名,其指针类型就是指向‘数组元素类型的指针’,而对于取地址后得到的指针,其指针类型是‘指向数组类型的指针’,此处具体的区别就在于其步长不同。前者步长为单个数组元素,而后者步长则是整个数组。"; cout << "下面分析多维数组:\n"; int arr2[2][5] = { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 } }; cout << "arr2 :" << arr2 << endl; //‘取地址操作’,得一个arr2数组的‘元素’,即得到的是第一个数组 cout << "*arr2 :" << *arr2 << endl; //与上一条语句效果相同 cout << "arr2[0] :" << arr2[0] << endl; //得到指向‘第二个元素’的指针,即指向第二个数组的指针 cout << "arr2 +1 :" << arr2 + 1 << endl; //‘接引用操作’,得到arr2数组的‘元素值’,即得到的是第二个数组 cout << "*(arr2 + 1) :" << *(arr2 + 1) << endl; //与上一条语句效果相同 cout << "arr2[1] :" << arr2[1] << endl; //对‘第一个数组’进行地址+1操作,此时,步长为第一个数组内的元素字节数 cout << "(*arr2)+1 :" << (*arr2) + 1 << endl; //取上一句得到的地址中的值 cout << "*((*arr2)+1) :" << *((*arr2) + 1) << endl; //对‘第二个数组’进行地址+1操作,此时,步长为第二个数组内元素的字节数 cout << "*(arr2+1)+1 :" << *(arr2 + 1) + 1 << endl; //对上一句得到的地址中的值 cout << "*(*(arr2+1)+1) :" << *(*(arr2 + 1) + 1) << endl; //对整个数组arr2进行取地址&操作,得到的则是指向整个二维数组的指针,其步长为整个二维数组,此处步长为10*sizeof(int)==40字节 cout << "&arr2 +1 :" << &arr2 + 1 << endl; }
二维数组分析与一维数组其实是一样的,对于此处的二维数组,其数组名代表的指向数组arr2第一个‘元素’的指针而在此处,应该把‘元素’理解为一个数组,此处一个‘元素’为一个带有5个整型元素的数组,也就是说arr2的步长是5*sizeof(int)=20字节,因而,数组名是一个指向整个数组的指针,具体表现为指向第一个数组的指针;而对于*arr2和arr2[1],是对数组的解引用和取值操作,其得到的虽然在数值上和arr2一样,但是含义是不同的,*arr2和arr2[0]所得到的是第一个数组内,指向该数组‘第一个元素’的指针,而此处的元素,则是理解为一个‘整数元素’了,也就是说此处*arr2和arr2[0]所得到的指针的步长是一个整型所占字节,即4字节。
相关文章推荐
- 关于指针的一些事情
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#比较二个数组并找出相同或不同元素的方法
- 快速解决C# android base-64 字符数组的无效长度问题
- C# 拷贝数组的几种方法(总结)
- C#动态调整数组大小的方法
- 详解Lua中的数组概念知识
- Perl中的列表和数组学习笔记
- jQuery 判断是否包含在数组中Array[]的方法
- 浅谈C#各种数组直接的数据复制/转换
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- Linux Shell 数组建立及使用技巧
- PowerShell数组的一些操作技巧
- C#通过yield实现数组全排列的方法
- C#不重复输出一个数组中所有元素的方法
- C#实现将数组内元素打乱顺序的方法