您的位置:首页 > 其它

数组分析

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字节。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  指针 数组