数组

声明数组:

typeName arrayNAme [arraySize]

计算机必须在程序执行之前就已经知道数组的大小,因此中括号内只能是一个常量表达式,而不能含有变量。

在初始化数组时,大括号中的值的个数不能大于声明数组的大小,也不能通过添加逗号的方式跳过。但是初始化值的个数可以小于声明数组的大小,此时仅对前面一些有初始化值的元素依次进行初始化。比如:

int array1[3]={0,1,2}; //正确

int array2[3]={0,1,2,3}; //错误,初始化值个数大于数组大小

int array3[3]={0,,2}; //错误,初始化值被跳过

int array4[3]={0,1,}; //错误,初始化值被跳过(即使是最后一个元素,添加逗号也被认为是跳过)

int array5[3]={0,1}; //正确,省略初始化最后一个元素


如果只对数组的一部分进行初始化,则编译器将把其他元素都设置为0 。

可以不在大括号内包含任何东西,这将把所有元素都设置为0。

int array6[3]={0}; //{0,0,0}

int array7[3]={}; //{0,0,0}

int array8[3]={1}; //{1,0,0}

int array9[3];//会是3个任意的数值

 

C++中,下标是从0开始的,所以一个大小为n的数组,它的有效下标是0到n-1

int array[5];

数组所含元素个数: sizeof(array) / sizeof(int);

 

        在计算机里,就好像有许许多多的开关,用导通(开)来表示1,用断开(关)来表示0。当只有一个开关的时候,这个开关能表示两种状态,即01;当有两个开关的时候,这两个开关可以表示四种状态,即00011011……,当有8个开关的时候,可以表示2^8=256种状态,分别是0~255在计算机中,就是用8个开关(01)来表示一个字节(Byte)的,每一个开关(01)称为一个Bit),即8位组成一个字节。把一个字节所能表示的256种状态和256个字符按一定的顺序一一对应起来,一个字节就可以表示256种不同的字符。这种用8位二进制表示一个字符的编码称为ASCII码,它的全称是美国信息交换标准码(America Standard Code for Information Interchange)。需要记住的ASCII码有三个,数字0ASCII码为十进制的48,大写字母AASCII码为十进制的65,小写字母aASCII码为十进制的97

 

只有在定义数组时才能使用初始化,不能将一个数组赋值给另一个数组。

 

字符型数组:

 

空字符( \0 )(实际上是被设置为0的字节)

 

“S”是字符串常量(使用双引号),表示的是两个字符(字符S和\0)组成的字符串。

(实际上表示的是字符串的第一个元素所在的内存地址

‘S’是字符常量(使用单引号),在ASCII系统上,表示的是83。

 

cin使用空白(空格,制表符(Tab)和换行符)来确定字符串的结束位置。

 

getline()函数读取整行,通过换行符来确定输入结尾,但不保存换行符;在存储时,用空字符来替换换行符。(getline(cin,str); )

 

get()函数读取整行,但并不丢弃换行符,而是将其留在输入队列中,因此如果不借助于帮助,get()奖不能跨过换行符。

可用不带任何参数的cin.get()调用可读取的下一个字符(即便是换行符),因此可以用它来处理换行符,为读取下一行输入做好准备。

       charc1[20],c2[20];

       cin.get(c1,20);

       cin.get();

       cin.get(c2,20);

注意:getline()使用起来简单一些,但get()使得检查错误更简单些。

 

头文件cstring:

strlen()函数计算可见字符的长度(不把空字符计算在内)

strcpy()函数可将字符串复制到字符数组中

strcat()函数可将字符串附加到字符数组末尾


向函数传递数组:

int max(int [],int);  //函数的声明

int max(int a[],int size)  //函数的定义(数组的名称 +数组含有元素的数目 )
{

       //
 }

为什么不在函数里面用sizeof算出数组的大小,而非要在函数外面计算好了,再作为参数传递给函数呢?

        参数的传递是将实参的值赋给形参。然而对于数组来说却是一个例外,因为数组的数据太多了,将其一一赋值既麻烦又浪费空间,所以数组作为参数传递给函数的只是数组首元素的地址(如果在函数中,用sizeof计算数组的大小,得到的是一个元素的大小),函数在需要用到后面元素时再按照这个地址和数组下标去查找(因此在函数中改变数组中的数值,就是直接对数组进行操作)。因为后面的元素根本没进入函数,所以在函数里求不出数组的大小。


        数组名实质上是一个指向数组首元素指针。也就是说,可以用数组名来初始化一个对应类型的指针。

#include<iostream>

using namespace std;
int main()
{
   int a[6]={1,2,3,4,5,6};
   int *pt=a;
   for(int i=0;i<6;++i)
      cout<<a[i]<<pt[i]<<*(pt+i)<<*(a+i)<<endl;
   return 0;
}

//运行结果:
//5555
//3333
//4444
//1111
//2222
//6666

       根据上面的这段程序,可以知道a[i]、pt[i]、*(pt+i)、*(a+i)都能够访问到数组的元素。所以,上述四者是等价的。虽然数组名是指针,但它是一个指针常量。也就是说,不带下标的数组名不能作为左值。

        指针是一种数据类型,所以,我们可以用指针类型来创建一个数组。声明一个指针数组的语句格式是:int* a[10];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值