数组

1.数组的特点: 1)数组中的每个元素具有相同的类型;

              2)每个元素由“下标”唯一标示;

              3)使用连续内存空间;

              4)数组的下标从0开始。

2.一维数组的内存结构图:


2.注意数组访问时不能越界!

3.一维数组初始化时应该注意四点:

1)初始化时,可以对全部元素赋初值,也可以对部分元素赋初值;

2)如果只对部分元素赋初值,没有赋初值的元素默认为0

3)若对所有元素赋初值,可以不显示指定数组的长度,系统会根据初值表中数据的个数自动定义数组的长度;

4)在定义数组时,编译器必须知道数组的大小。因此,只有在初始化的数组定义中才能省略数组的大小。

5.sizeof函数计算数组中的元素个数代码如下:

void main()

{

       int iArray[4] = { 0, 1, 2, 3 };

       int iSize = sizeof(iArray) / sizeof(iArray[0]);

       for ( int i=0 ; i<iSize ; ++i )

       {

cout<<iArray[i]<<endl;

       }

system("pause");

}

6.使用字符数组应该注意:

1)如果字符个数大于数组长度,系统会提示用户语法错误;

2)用字符串初始化字符数组时,系统会在字符数组的末尾自动加上一个字符'\0'。因此,要考虑数组的长度比实际字符的个数大1

3)用字符串初始化一维字符数组时,可以省略大括号{}。

4)输出字符数组时会自动输出到\0结束(比较特殊!!)。

7.数组名字也可以作为整个数组的首地址。

8.不能分配大小为0的数组。

9.代码如下:

#include <iostream>

using namespace std;

//定义了一个“宏”

#define ArrayLength 10

void main()

{

//--------2015.4.7 一维数组--------

//一维数组:具有1个下标的数组

const int c_iArraySize = 5;

int iArray1[c_iArraySize+3]; //声明一个整型数组iArray1,它有5个元素,下标分别为0-4

float fArray1[c_iArraySize];

char cArray1[ArrayLength+6];

//数组元素的访问方式:数组名[下标]

//cout<<"iArray1[0] = "<<iArray1[0]<<endl;//反例:报运行时错误,没有初始化的情况下就使用了该数组元素

 

int iArray2[c_iArraySize] = {},iArray3[c_iArraySize+ArrayLength];

//数组的初始化方式1:全都初始化

int iArray4[5] = {1,2,3,4,5};

//循环输出数组元素

for(int i = 0 ; i < 5 ; ++i)

{

cout<<"iArray4["<<i<<"]="<<iArray4[i]<<endl;

}

int iIndex = 0;

cout<<iArray4[iIndex++]<<endl;//输出 1 ,iIndex为 1

cout<<iIndex<<endl;

cout<<iArray4[++iIndex]<<endl;//输出 3 ,iIndex为 2

cout<<iIndex<<endl;

注意:double到float警告

//float fArray2[5] = {1.2,2.2,3.2,4.2,5.2};

//数组的初始化方式2:部分初始化

int iArray5[10] = {1,3,5,7,9};

for(int i = 0 ; i < 10 ; ++i)

{

cout<<"iArray5["<<i<<"]="<<iArray5[i]<<endl;

}

直接输出数组名:得到整个数组的"首地址"

//cout<<iArray5<<endl;

//数组的初始化方式3:在没有明确给出数组长度的情况下,默认为全都初始化

int iArray6[] = {2,4,6,8,10};

int iLength = 0; //数组长度

//对数组名进行sizeof操作,得到数组的总字节数

int iArrayBytes = sizeof(iArray6);

iLength = iArrayBytes / sizeof(iArray6[4]);

for( int i = 0 ; i < iLength ; ++i )

{

cout<<"iArray6["<<i<<"]="<<iArray6[i]<<endl;

}

//cout<<iArray6[5]<<endl;//反例:访问越界

//int iArray7[0] = {};//反例:不能分配大小为0的数组

//int iArray8[] = {};//反例:不能分配大小为0的数组

//-----数组的动态初始化:在声明数组后再为数组元素赋值-----

int iArray9[5];

for(int i = 0 ; i < 5 ; ++i)

{

iArray9[i] = (i+1)*10 + 1;

}

for(int i = 0 ; i < 5 ; ++i)

{

cout<<"iArray9["<<i<<"]="<<iArray9[i]<<endl;

}

//------------字符数组------------

char cArray2[10] = {'H','e','l','l','o','W','o','r','l','d'};

for( int i = 0 ; i < 10 ; ++i )

{

cout<<"cArray2["<<i<<"]="<<cArray2[i]<<endl;

}

cout<<cArray2<<endl; //特殊形式:没有\0结束符

char cArray3[10] = { 'H' };

for( int i = 0 ; i < 10 ; ++i )

{

cout<<cArray3[i]<<endl;

}

char cArray4[11] = {"HelloWorld"};

for( int i = 0 ; i < 10 ; ++i )

{

cout<<cArray4[i];

}

cout<<endl;

char cArray5[10] = "HelloC++";

for( int i = 0 ; i < 10 ; ++i )

{

cout<<cArray5[i];

}

cout<<endl;

//字符数组特殊输出方式:

char cArray6[20] = "Hello\0World C++";

cout<<&cArray6<<endl;

//键盘输入一个字符数组

char cArray7[30] = {};

cout<<"请输入字符串:";

cin>>cArray7;

cout<<cArray7<<endl;

system("pause");

}

10.二维数组赋值方式有两种:

1)按行分段赋值int  iArray[3][4]={

                                                      {1,2,3,4},

                                                     {3,4,5,6},

                                                      {5,6,7,8}

};

2)按行连续赋值int iArray[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85 };

11.对全部元素赋初值,则第一维的长度可以不给出.

12.多维数组道理同二维数组,如下为一个三维数组:

int iArray[2][3][4] =

{

{

{1,2,3,4},

{5,6,7,8},

{9,10,11,12}

},

{

{101,102,103,104},

{105,106,107,108},

{109,110,111,112}

},

       };

13.代码如下:

#include <iostream>

using namespace std;

#include <iomanip>

void main()

{

// 声明一个二维数组

int iArray1[5][5];

// 定义一个二维数组,全都初始化

int iArray2[5][5] =

{

{ 11 , 12 , 13 , 14 , 15 },

{ 21 , 22 , 23 , 24 , 25 },

{ 31 , 32 , 33 , 34 , 35 },

{ 41 , 42 , 43 , 44 , 45 },

{ 51 , 52 , 53 , 54 , 55 }

};

// 对二维数组的元素逐个进行访问,通过嵌套的for循环

for( int i = 0 ; i < 5 ; ++i )

{

for( int j = 0 ; j < 5 ; ++j )

{

cout<<iArray2[i][j]<<"  ";

}

cout<<endl;

}

//定义一个二维数组,进行部分初始化

int iArray3[5][5] = {};

for( int i = 0 ; i < 5 ; ++i )

{

for( int j = 0 ; j < 5 ; ++j )

cout<<iArray3[i][j]<<"  ";

cout<<endl;

}

//定义一个二维数组,进行部分初始化

int iArray4[5][5] = {1,2,3,4,5,6};

for( int i = 0 ; i < 5 ; ++i )

{

for( int j = 0 ; j < 5 ; ++j )

cout<<iArray4[i][j]<<"  ";

cout<<endl;

}

//定义一个二维数组,进行部分初始化

int iArray5[5][5] = {{1},{2,3},{4},{5},{6}};

for( int i = 0 ; i < 5 ; ++i )

{

for( int j = 0 ; j < 5 ; ++j )

cout<<iArray5[i][j]<<"  ";

cout<<endl;

}

//定义一个二维数组,进行部分初始化

//当我们对二维数组进行初始化赋值的时候,行可以不明确给出

//系统会自动根据列数及初始值的个数,计算行数

cout<<"--------------------"<<endl;

int iArray6[][5] = {{1,2},{3,4,5},6};

for( int i = 0 ; i < sizeof(iArray6) / (5*sizeof(int)) ; ++i )

{

for( int j = 0 ; j < 5 ; ++j )

cout<<iArray6[i][j]<<"  ";

cout<<endl;

}

cout<<"--------------------"<<endl;

//动态初始化二维数组

int iArray7[5][5] = {};

for( int i = 0 ; i < 5 ; ++i )

{

for( int j = 0 ; j < 5 ; ++j )

{

iArray7[i][j] = (i+1)*10 + j+1;

}

}

for( int i = 0 ; i < 5 ; ++i )

{

for( int j = 0 ; j < 5 ; ++j )

cout<<iArray7[i][j]<<"  ";

cout<<endl;

}

int iArray8[10][10] = {};

for( int i = 0 ; i < 10 ; ++i )

{

for( int j = 0 ; j < 10 ; ++j )

{

iArray8[i][j] = i*j;

cout<<setw(3)<<iArray8[i][j]<<"   ";

}

cout<<endl;

}

//二维可以被看成是一维数组的数组

int iArray9[3][4] =

{

{11,12,13,14},

{21,22,23,24},

{31,32,33,34},

};

//二维字符数组

char cTemp[20] = "hello" ;

cout<<cTemp<<endl;

char cArray1[3][20] = { "Today","is","Good" };

for(int i = 0 ; i < 3 ; ++i)

{

cout<<cArray1[i]<<endl;

}

cout<<"二维字符数组的首地址:"<<cArray1<<endl;

system("pause");

}

13.如果不给数组赋初始值则数组中存的均为错误的数据,如下图:


14.二维数组的存储结构:


15.因为静态二维数组内存连续,所以可以单纯的用一个指针去访问数组里面的元素。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值