1、当数组作为参数传递时,会使得数组被处理成指针
#define NUM 10
char arr[NUM]
char arr[]
char* arr
以上三种表达方式作为参数传递时,效果一样
2、如果不想将数组维数作为参数传递进去,可以考虑数组的引用
char(&arr)[NUM];
此时,编译器将数组的维数作为参数类型的一部分,如果不用引用,则指传递数组首地址
3、谈谈数组的引用
对于引用:编译器实际上是将引用变量编译为指针变量,此指针变量的值,就是被引用变量的地址,存储地址按照字节编址。
char &arr[NUM] --这种写法是错误的
指针的数组:char *arr[NUM] 和数组的指针:char(*arr)[NUM]
但不能完全迁移到“引用的数组”和“数组的引用”上来
引用变量是被引用实体的别名,引用变量不分配内存,所以引用变量不能作为数组元素
也即是说char &arr[NUM] 这种写法不存在
char (&arr)[NUM] 用在引用上,因为引用相当于指针,所以数组的引用必须能确定数组内任何一个元素的地址,所以以此作为参数时,数组的维数是带进去了的
引用变量应该注意:引用变量不能引用不分配存储单元或不按照字节编址的实体
引用变量不能再次引用另一个引用变量
寄存器变量没有地址,但编译器可以将其编译为自动变量,因此register 类型的变量可以被引用
位段是按照位来编址,不能引用位段
阅读(1695) | 评论(0) | 转发(0) |