[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
- [C++杂记] 数组的语法我总忘记~记之
- 记录自己总忘记的SQL语法
- 细小语法(我容易忘记的)
- c/c++杂记之数组输入
- Objective-C语法之数组对象的那些事儿
- 一些我总会忘记的小知识总结(Android or Java)
- 杂记之C语言的转义字符
- 我的杂记
- 我的工作杂记
- 我的杂记
- 杂记之C语言之循环语句的效率
- 杂记之C语言之函数scanf的使用
- 我的前端学习之旅(总)
- 我的心灵鸡汤之--该忘记的和不该忘记的
- 语法杂记
- 列出比较容易忘记的 C++(C)语言语法及标准库
- [杂记]献给我的vb
- 我的android新手杂记
- Comparable<T>接口实现
- HDOJ1006 Tick and Tick题解
- 三月小结
- Linux使用技巧8--ssh server
- 我的java学习笔记(11)关于装箱、参数可变方法和枚举类型
- [C++杂记] 数组的语法我总忘记~记之
- Poco库http客户端代码
- srm 301 div2 1000 (经典dp, 括号匹配)
- 大一第二学期第3周【项目4:考了语文数学的学生】
- dede中php标签结合sql使用方法
- 第二周项目二
- 学java的心得
- Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable co
- 排序算法之插入算法