数组

来源:互联网 发布:幸运叶子 知乎 编辑:程序博客网 时间:2024/06/05 20:12

声明数组:

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];

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 消费分期后退款分期账单还在怎么办 新房装修物业电梯用不了费用怎么办 在京东拼购没有拼成已付款的怎么办 微信上买东西发的货不一样怎么办 微信买东西收到货不付款怎么办 京东商品店家待出库不发货怎么办 微信二维码付款多付了怎么办 微信二维码付款付错了怎么办 身份证被移动公司拉黑了怎么办 微店申请退款卖家不同意怎么办 淘宝退货快递把我名字填错了怎么办 刚申请淘宝店信用为零怎么办 淘宝买家已付款卖家不做皮单怎么办 淘宝店铺被屏蔽7天后该怎么办 香信得登录密码忘了怎么办 苹果手机迅雷下载不了的资源怎么办 快手官方私信你的作品违规了怎么办 顺丰生鲜速配食物坏了怎么办 半年汽车没有年检 交警抓到怎么办 没年检的车子被交警抓到怎么办 去年检的路上被交警抓了怎么办 微信聊天界面群聊删除找不到怎么办 微博抽奖的奖品没发货怎么办 两个微信号绑了一个手机号怎么办 欧月玫瑰花朵叶子上有白粉怎么办 进对方空间被挡不想让他知道怎么办 qq上买东西给钱了对方没给怎么办 微信钱包手势密码忘记了怎么办 买家一起拍了两件宝贝怎么办 宿雾航空付款无法显示验证码怎么办 不小心把购物车的东西删了怎么办 微信在别人电脑登录忘退出怎么办 微信电脑版忘了退出怎么办 给微商交了定金不给退怎么办 方舟手游飞龙驯服时间不够怎么办 淘宝上买了假货找不到商家怎么办 魅蓝手机一直在开机画面怎么办 在实体店买的手机想退怎么办 淘宝买了东西发货了不想要了怎么办 快递已经发货了不想要了怎么办 锤子手机买了不到十天碎屏了怎么办