Chinaunix首页 | 论坛 | 博客
  • 博客访问: 114516
  • 博文数量: 83
  • 博客积分: 2531
  • 博客等级: 少校
  • 技术积分: 865
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-31 20:40
文章分类

全部博文(83)

文章存档

2011年(7)

2010年(76)

我的朋友

分类: C/C++

2010-04-17 21:06:31

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) |
给主人留下些什么吧!~~