数组
Ⅰ.定义数组
如:
int a[4]
里面的"4"不可以是变量或者常量。
如:
int a=5(或者cin>>a)
int array[a];
以上是错误的
(要是可以的话之前还搞那个指针申请空间干哈)
但是
如:
const int a=5; (const float就不行了,只能int)
int array[a];
//-------------------------------------------------------
define a 5 (记得定义常量的时候是没有“;”的!!!!加了的话,代换的时候也有“;”这个哟)
int array[a];
以上两个是正确的
…
…
定义二维数组:
定义二维数组的时候如果没有同时给它赋初始值是不可以忽略第一维度的(该数组数组在作为形参的时候可以)
如:
//这是错的,因为你去申请一个数组的时候你肯定要申明好空间大小的嘛~不然还要指针动态申请空间干哈
int array[][4];
//这也是对的,这个就容易理解啦~~
int array[][4]={'2','4','1','8','3'};
//这是对的,其实一维[]里的东西写不写都一样,因为编译器会直接忽略它,但是二维就一定要写哟~
void TakeItOut(int a[][2]);
Ⅱ.赋值数组
不管是什么数组,都不可以整体赋值
如:
int a[5];
int b[5]={1,2,3,4,5};
a=b; //这个之前记混了,是结构体才可以因为结构相同而直接赋值~~
//--------------------------------
int a[5]=4;
以上这两种都是错的
原因有主要是因为数组其实是因为数组指的是一个地址(a[0]的地址),而地址是常量,是不可改变的,所以你本意是想给它整体赋值的操作编译器就会觉得你想改变它的地址(常量),所以就会报错。
Tip:
//下面这个是ok的~
int array[3]={'1','2','3'};
//下面两个是错的
int arry[3];
array[3]={'1','2','3'}; //只能在定义的时候赋值才可以用{},之后只能一个个赋值~
&
array={'1','2','3'}; //就是试图修改地址啦~
Ⅲ字符数组
这玩意儿比较特殊,我就单独拿出来了
举栗子对比一下
//----------------------------以下为相同点----------------------------
//初始化的比较:都能用{}
int int_array[2]={'2','3'};
char char_array[2]={'q','d'};
//赋值中的比较:能一个一个赋值,都不能用{}
int int_array[2]; //这是普通数组
char char_array[2]; //这是字符型数组
char_array[1]={'2'};
//----------------------------以下为不同点----------------------------
//cin的比较:一个可以整体操作,一个不行
cin>>int_array[1]; //只能这样一个一个
cin>>char_array; //这个就可以整体操作了~
//cout的比较:与cin一样,一个可以整体操作,一个不行
cout<<int_array[1]; //只能这样一个一个
cout<<char_array; //可以把数组直接输出,遇到'\0'也就是字符串结束标志的时候输出结束
//在这里提一点,如果cout<<int_array,不会报错,输出的是这个数组的地址,而数组char数组就是输出里面的内容~
//再说多一点~如果是:
string array;
cout<<array; //这里输出的也是地址(不要因为他是字符串就以为和char一样,至少多了个串字嘛~)
//初始化中的差别:字符串直接用字符串赋值
char char_array[10]={"Hi!"};
//也可以是
char char_array[10]="Hi!";
//值得一提的是那些空的位置是用'\0'填充了(我不是申请了10个空间嘛,但是只用了四个,多的那些就是用'\0'填充了)
//我上面说我用了四个空间是没毛病的,它们分别是:‘H’,'i','!','\0',最后那个是系统给它,只用我用的是字符串赋值就会,如果我是用一个一个的方法赋值就不会:char char_array[10]={'H','i','!'};这个就不会多出一个'\0'。
//所以用字符串赋值会比用字符赋值多出一个长度哟!(当然,这是建立在你字符没加'\0'的情况)