使用数组时注意的一些问题
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;
}
*数组注意的一些问题
*/
#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;
}
相关文章推荐
- 使用Kubernetes需要注意的一些问题(FAQ of k8s)
- Labview使用DAQ数据采集的一些注意问题
- 在PostgreSQL中使用数组时值得注意的一些地方
- 当使用ajax 由前台像后台post 数组类型数据的一些问题(基于springboot)
- 使用for循环对 golang 中结构体数组取值进行修改时,需要注意的问题
- 数组与类使用PHP的可变变量名需要的注意的问题
- ANDROID动态加载 使用SO库时要注意的一些问题
- java实际开发中泛型使用需要注意的一些问题
- Dialog使用中需要注意的一些问题
- JAVA使用并行流(ParallelStream)时要注意的一些问题
- 使用Reflector工具时注意的一些问题
- 使用HQL语句查询的时候需要注意的一些问题
- 使用Entity Framework时要注意的一些性能问题
- 使用Kubernetes需要注意的一些问题(FAQ of k8s)
- 使用Entity Framework时要注意的一些性能问题
- 使用VS2005开发64位驱动程序需要注意的一些问题
- 使用异常时需要注意的一些问题(转)
- 使用IOCP需要注意的一些问题~~(不断补充)
- JAVA使用并行流(ParallelStream)时要注意的一些问题
- 使用Xib要注意的一些问题