您的位置:首页 > 其它

使用数组时注意的一些问题

2012-09-28 18:08 162 查看
/*

*数组注意的一些问题

*/

#include <iostream>

using namespace std;

int main()

{

const int ArraySize = 5;

//对数组中元素初始化,而没有初始化的元素在默认的情况下会用数值0填充,代表的是空字符(NULL或\0)

int arr[ArraySize] = {10,3,5};

//数组名,表示的是第一个元素的起始地址(推荐直接使用数组名)

cout << "arr = " << arr << endl;

//数组是一个集合,对数组名取地址,取得是该数组所代表集合的首地址(一般不推荐使用对数组名取地址)

cout << "&arr = " << &arr << endl;

{

/*数组名本身不是变量,所以它不占用存储空间,也不能用来存储数据;,

它只是代表一个数据,作为值时,它代表数组中第一个数据元素的地址。*/

//比如下面的做法就是错误的!!!

/*编译时报错:incompatible types in assignment of ‘int’ to ‘int [5]’

--- 在将整型分配给整型数组时出现类型不相容*/

//arr = 1016;

/*编译时报错:assigning to an array from an initializer list*/

//arr = {10,16,8};

//因此,不能对数组赋值,只能对数组元素初始化或赋值。

}

//如果定义一个数组,没有对其初始化,那么其输出的数据会是垃圾数据,而不是没有值

/*cout << "没有对数组初始化,输出的是垃圾数据!" << endl;

for(int i = 0; i != ArraySize; i++)

cout << arr[i] << ' ';

cout << endl;*/

//输入数据,对数组arr中的数据元素进行赋值

/*即使输入的数据元素的个数大于数组的长度,cin 也只会根据数组的长度

在输入缓冲区中提取所需数据,而剩余的数据会留在输入缓冲区,供下次使用*/

//cout << "输入的数据分别是:" ;

//for(int i = 0; i != ArraySize; i++)

//cin >> arr[i];

//下面是三种不同的方法输出每个数组元素在内存中地址

/*cout << "方法一:" << endl;

for(int i = 0; i != ArraySize; i++)

cout << "&arr[" << i << "] = " << &arr[i] << endl;

cout << "方法二:" << endl;

for(int i = 0; i != ArraySize; i++)

cout << "[arr+" << i << "] = " << arr+i << endl;

cout << "方法三:" << endl;

for(int i = 0,*p = arr; p != (arr+ArraySize) && i != ArraySize; i++,p++)

cout << "p -[" << i << "]= " << p << endl;*/

/*下面四种输出数组中元素的方法都没有错误;

编译器在编译时对数组中的方括号做了相应的变换:(两边都是相互等价的)

arr[i] <=> *(arr+i)

*(arr+i) <=> *(i+arr)

*(i+arr) <=> i[arr]

arr[i] <=> i[arr]

i 是偏移量,表示偏移第一个元素的元素个数*/

/*for(int i = 0; i != ArraySize; i++)

cout << arr[i] << ' ';

cout << endl;

for(int i = 0; i != ArraySize; i++)

cout << *(arr+i) << ' ';

cout << endl;

for(int i = 0; i != ArraySize; i++)

cout << i[arr] << ' ';

cout << endl;

for(int* p = arr; p != (arr+ArraySize); p++)

cout << *p << ' ';

cout << endl;*/

//越界访问数组中的数据元素

cout << "越界访问的后果!" << endl;

int iNum = 123,iLen = 90;

int array[7] = {10,3,6,8,5,9,7};

//越界访问数据可能会访问到无法与之的数据

for(int i = -2; i != 9; i++)

cout << array[i] << ' ';

cout << endl;

cout << iNum << "---" << iLen << endl;

//越界存放数据可能会其它变量的值,甚至可能会导致程序崩溃(没有发生这种情况,怪哉!!!)

for(int i = -2; i != 7; i++)

cin >> array[i];

for(int i = 0; i != 7; i++)

cout << array[i] << ' ';

cout << endl;

cout << iNum << "---" << iLen << endl;

return 0;

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