Chinaunix首页 | 论坛 | 博客
  • 博客访问: 268449
  • 博文数量: 138
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 971
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-03 10:05
文章分类

全部博文(138)

文章存档

2016年(1)

2015年(137)

我的朋友

分类: C/C++

2015-07-18 12:41:04

1、数组做形参:编译器会忽略为任何数组形参指定的长度(编译器检查数组形参关联的实参时,值检查实参是不是指针,指针类型和数组元素类型是不是匹配,不检查数组长度)
                        数组以 非引用类型传递,数组名会自动转换为指向数组第一个元素的指针,实参指针和形参指针指向同一个数组,因此,通过指针形参做的任何改变都在修改数组元素本身。
                        当数组以引用类型传递时,编译器不会将数组实参转化为指针,而是传递数组的引用本身。此时,数组大小作为形参和实参类型的一部分,编译器会检查实参的大小与形参大小是否匹配
                        多维数组的传递(int (&p)[10]):多维数组的元素本身就是数组,除了第一维意外的所有维的长度都是元素类型的一部分,必须明确指定。

数组名属于左值,不是右值,而且是一个不可修改的左值,因为数组类型属于聚集类型,不是标量类型,数组对象的内容无法视作一个数值。
2、定义数组
首先,无论定义静态数组还是定义动态数组,都要求指定数组长度,不允许使用不完整的类型。可以通过初始化式确定数组长度的情况除外;对于多维数组,仍然是只能省略第一维的长度,即使是有初始化的情况(因为即使有初始化,也不能通过初始化式就确定出第一维外的长度)。
其次,在定义静态数组变量时,可用来定义数组长度的一定是编译时值确定的(要求定义数组长度的一定是编译时可确定的常量表达式
            大部分编译程序在编译时就把sizeof计算过了,所以可以用sizeof()定义数组长度;
            源文件中的const变量const int buffersize =100,编译时可以用buffersize定义数组长度  VS  strlen的结果要在运行时才计算,因此不能用来定义数组长度;
            源文件中的普通变量int buffersize=100,不是常量,不可以用来定义静态数组长度;
          定义动态数组时,由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。意思就是,动态数组虽然也是要指定大小的,但是,可以用一个编译时不确定但是运行时才确定的变量来定义动态数组长度。因为运行时可以确定需求,
            所以,他不会浪费空间。
                    int len;
                    cin>>len; //如果没有这句不行,因为会导致数组在使用时还没初始化长度。
                    int * p=new int[len]; //长度在使用前初始化即可

            数组长度做形参和一般变量一样。只有在运行时,才会调用函数模块,才会实例化形参,所以也不能用形参定义函数模块中的静态数组,但是可以定义动态数组。
阅读(1535) | 评论(0) | 转发(0) |
0

上一篇:enum

下一篇:算术转换

给主人留下些什么吧!~~