开始总结数组是因为看到一个例题,当时没想明白。如下:
const int size = 4*1024;
char page[size];
void f(){
page[size+size] = 7;
cout<<page<<endl;
}
当主函数调用f()时,没有输出。因为f()里面赋值是给了page[size+size],相当于把数值写入了一个毫不相关的内存区域,而page里面并未赋值( page的大小是size!),[ ]里面应该填写 0 ~ size-1 数值才表明赋值给了page。
而数字7代表什么呢?其实是ascii码的7,查询对应的字符是什么即可;
例如,把7改成48(48是'0'的ascii码值)同时把size+size改成 0 ~ size-1 期间的值,就可以输出‘0’。
!!!
在这里区分一下数组的定义、初始化与赋值:
int str1[6] = ? ; //这个?填的是对整个str1一维数组的初始化值
str1[6] = ? ; //这个?填的是数组str1里面第七个数的值(0~6)
----------------------------------------------------------------------------------------------------------------------------------
关于传递数组的问题
“不能以值传递的方式直接把数组传递给函数,我们通常传递的是指向数组首元素的指针”,因此:
1.一维数组
void comp(int* arr,int num){//int *arr等价于int arr[],,也可以是int arr[4],都是首地址
for(int i=0;i<n;i++){
//对arr[0~n-1]的操作
...
}
}
2.二维数组
void comp( int mm[2][4] ){//调用时comp(v);
//传入的参数等价于 comp( int mm[][4] , int dim1 ),调用时comp(v,2);
//也可等价于 comp(int *mm , int dim1 , int dim2 ),调用时comp(&v[0][0],2,4)或者comp(&v[0],2,4);
//comp( int mm[][] , int dim1 , int dim2 )会报错,因为多维数组的第二个维度必须是已知的
//接下来可以对 mm[dim1][dim2] 进行操作
...
}