C/C++之变长数组(VAL)和可伸缩型数组成员
2016-09-27 20:17
134 查看
数组主要用来处理一系列同类型的数据集合,在C/C++中应用十分广泛。其中有两种特殊的数组,变长数组(VAL)和可伸缩型数组成员,应用得当的话,会非常方便。
如下所示:
这种函数只能处理固定列的数组,要想处理任意行、任意列的数组,就需要用到变长数组(VAL)。但是变长数组必须在函数内部或者作为函数参数使用,它的维数大小都可以用变量来表示。
函数的定义如下:
声明规则:
伸缩型数组成员必须是最后一个数组成员
机构中必须至少有一个其他成员
声明格式和普通数组一样,除了它的方括号内是空的
使用格式:
用指针来访问伸缩型数组和普通数组一样。
变长数组和伸缩型数组成员都是在调用的时候确定数组的大小,分配空间,可以节省内存。
变长数组(VAL)
在多维数组中,数组的行可以在函数调用时传递,但是数组的列一般在函数内部定义。如下所示:
#define COLS 4 int sum2dim ( int a[][COLS],int rows ) { int r; int c int tol=0; for (r=0; c<rows; r++) for (c=0; c<COLS; c++) tol+=ar[r][c]; return tol; }
这种函数只能处理固定列的数组,要想处理任意行、任意列的数组,就需要用到变长数组(VAL)。但是变长数组必须在函数内部或者作为函数参数使用,它的维数大小都可以用变量来表示。
函数的定义如下:
#define COLS 4 int sum2dim ( int rows, int cols, int a[rows][cols] ) { int r; int c int tol=0; for (r=0; c<rows; r++) for (c=0; c<cols; c++) tol+=ar[r][c]; return tol; }
可伸缩型数组成员
可伸缩型数组成员在声明时不会分配内存空间,也不能直接使用。声明规则:
伸缩型数组成员必须是最后一个数组成员
机构中必须至少有一个其他成员
声明格式和普通数组一样,除了它的方括号内是空的
struct flex { int count; double ave; double sco[]; }
使用格式:
struct flex *pf pf= malloc (sizeof( struct flex) + 5 * sizeof( double);
pf -> count = 5; pf -> sco[2]=18.5;
for (i=0;i < 5; i++) { pf -> sco[i] = 20.0-i; }
用指针来访问伸缩型数组和普通数组一样。
变长数组和伸缩型数组成员都是在调用的时候确定数组的大小,分配空间,可以节省内存。
相关文章推荐
- C++(typedef、一维数组转成二维数组、C和C++区别、成员地址成员指针、构造析构函数、this指针、const用法、显示时间、const用法)
- 【C/C++】数组:复合文字和伸缩型数组(C99特性)
- 【c++程序】在数组对象中初始化成员变量
- C++实践参考:数组作数据成员
- 【C++基础学习】成员对象与对象数组
- C++数组成员的初始化
- C/C++ 学习笔记:结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)的用法
- C++第4周(春)项目4 数组作数据成员
- 2013级C++第4周(春)项目——再和对象找感觉【项目4 - 数组作数据成员】
- C++第8周项目 数组和指针 【项目1 - 数组作数据成员】(复习新版)
- C/C++柔性数组结构成员
- C++知识要点整理01:数组 内/外部成员
- C++初始化列表问题,类中有一个对象类型的数组成员变量,在初始化列表中初始化时报错“[]”操作符语法错误
- [C] 结构体中的伸缩型数组成员——《C Primer Plus》
- 空数组(伸缩型数组成员)
- c++成员函数指针数组
- 伸缩型数组成员(C99)
- C++第4周项目5 - 数组作数据成员(扩展1动态开辟空间)
- C++利用stl::sort对结构体数组中的字符串成员排序
- <C++略识>之对象数组与对象成员