数组
c++的数组好像和c语言差不多
数组是可以存储同类型值的一种数据格式
数组定义有三个要素
- 存储在每个元素中值的类型
- 数组名
- 数组中元素的个数
数组中的元素下标应当是有效的,否则可能存在潜在的危险。
数组也可以通过{}在初始化时候来直接赋值,例如
int hand[4];
hand[1]=3;
hand[2]=6;
hand[3]=8;
hand[4]=10;
int cards[4]={3,6,8,10};
如果初始化时只对其中的几个值进行赋值,那么其他的值默认为0
如果想要所有元素为0,只要这样定义就可以了
int hand [500]={0};
有时候也可以让程序自己计算数组元素的个数不过这样可能会出错
short things[]={1,2,3,4}
int num_elements = sizeof things/sizeof (short)
c++11标准中允许不带等号,允许 {}是空的,不可以缩窄转换
缩窄转换
C++中的变量占用内存大小不同,比如int是4个字节 short是2个字节, 如果把int强制转换成short就叫做缩窄转换,当然,这是有风险的, 例如 int a = 1000; short b = (short)a; 这样没有问题,但是当a超过short的范围,会造成数据溢出,比如 int a = 100000; short b = (short)a; 此时在内存中相邻b的变量,会被修改,造成数据溢出
C-风格字符串
将字符串存储在char数组中,特点是以空字符’/0’结尾
例如
char cat[4]={'c','a','t','/0'};
字符串常量和字符串字面值
只需要在数组后用引号将字符串括起来即可
char bird[11]="Mr. Cheeps"
char fish[]="Bubbles"
字符串常量不能与字符常量互换
地址是一种独立的类型
字符串拼接
以下各种写法等价
cout<<"I'd give my right arm to be""a great violinist \n ";
cout<<"I'd give my right arm to be a great violinist \n ";
cout<<"I'd give my right ar"
"m to be a great violinist \n ";
在数组中使用字符串
cin>>数组名
即可将内容输入到数组
程序中使用了头文件
strlen()函数来确定字符串的长度
#include <iostream>
#include <cstring>
int main(){
using namespace std;
const int Size = 15;
char name1[Size];
char name2[Size] = "C++owboy";
cout<<"Howday!I'm"<<name2;
cout<<"!whats your name?\n";
cin>>name1;
cout<<"Well,"<<name1<<", your name has";
cout<<strlen(name1)<<"letters and is stored\n";
cout<<"in an array of"<<sizeof(name1)<<"bytes.\n";
cout<<"Your initial is"<<name1[0]<<".\n";
name2[3] = '\0';
cout << "Here are the first 3 characters of my name:";
cout<<name2<<endl;
return 0;
}
sizeof和strlen的区别;
sizeof主要是一开始定义的数组长度有多长,而strlen则是实际装入字符的长度strlen只记录可见字符而不记录空字符。
本次输入的字符是zwb返回值是3而不是4正是因为如此
数组的长度定义不得少于strlen(“zwb”)+1