[C++杂记] 数组的语法我总忘记~记之

来源:互联网 发布:法国蜗牛知乎 编辑:程序博客网 时间:2024/04/29 22:47

1维数组创建的两种方法:

数组声明、赋值

声明一个数组

double myList[10];

声明多个数组

double myList[10], myList2[10];

声明数组时,中括号内的数组必须为常量。


myList[0] = 6;

当一个数组声明后还没有赋值,元素内容是任意的。

数组初始化语句

double myList[4] = {1.1, 1.2, 1.3, 1.4};

double myList[] = {1.1, 1.2, 1.3, 1.4};

中括号中的数字是可以省略的,因为编译器会自动计算大括号内的元素数目。


double myList[4] = {1.1};

上述语句相当于

double myList[] = {1.1, 0, 0, 0};

数组初始化语句相当于对数组先声明后赋值,如果大括号中的元素数目不足中括号中的数字,则使用元素0补齐。

1维数组作为函数参数

函数的定义如下所示:
void printArray(int list[], int arraySize) {    for (int i = 0; i < arraySize; i++) {        cout << list[i] << "  ";    }}
函数的调用如下所示:
int list[] = {1,2,3};printArray(list, 3);
1、为了效率的考虑,数组作为函数参数进行传递,本质是传递了数组的首地址。是按引用方式传递的。
2、在传递1维数组时,在形参处可以不填写中括号中的数字。中扩号的意思是告诉编译器,传入的参数时一个数组的首地址,在函数体中可以使用下标访问其元素。
3、数组在内存中是连续存储的,所以在函数中,可以使用下标变量来访问相应的数组元素。
4、C++语法不会判断数组访问越界。但是在程序运行过程中,如果发生了数组越界,就会发生Runtime error。因此在传入数组的同时,要传入数组的大小。

1维数组作为函数返回值

C++不允许返回一个数组类型,诸如下面的语句:
int[] reverse(const int list[], int size);
但是由于C++传递数组时引用传递,因此可以在函数外部声明一个数组,通过函数改变其内部元素值。这样与返回一个数组时同样的效果。
void reverse(const int list[], int newList[], int size);
上面的语句将list传入函数reverse中,reverse将list反转后保存在newList中。
由于数组的传递时引用传递,因此,如果不希望数组的内容被函数改变,那么就需要在形参前加关键字const;如果希望数组时作为返回值的,那么就再形参前不加关键字const。

2维数组

2维数组的声明、赋值、初始化语句只需参看1维数组的进行扩展。
2维数组作为函数参数与1维数组略有不同。2维数组作为函数的参数传递时,第二个方括号内必须填写数字。例如:
<pre name="code" class="cpp">void Func(int array[3][10], int rowSize, int colSize){    for(int i = 0; i < 3; i++) {        for(int j = 0; j < 10; j++) {           cout <<array[i][j] << "  ";        }    }}void Func(int array[][10], int rowSize, int colSize) {    for(int i = 0; i < 3; i++) {        for(int j = 0; j < 10; j++) {           cout <<array[i][j] << "  ";        }    }}
这是因为,二维数组在内存中的存储是连续的。在函数需要使用下标变量来对二维数组中的元素进行访问。编译器只有知道了第二维的大小,才能正确的寻址。寻址公式为:
array+i*colSize+j      array是数组的首地址。
所以,在传入2维数组时,必须传入第二维的大小。
同理,在使用高维数组时,只可以省略第1个中括号内的数字,其余的中括号的内的数字必须填写。



引用:
1、csdn博客 liyongbao1988的专栏 C/C++如何传递二维数组?
2、cnblog jihite 【c++】指针参数是如何传递内存的


0 0