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

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个中括号内的数字,其余的中括号的内的数字必须填写。



引用:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值