黑马程序员技术交流社区

标题: 数组名就代表了数组的地址这话怎么理解? [打印本页]

作者: x65396731    时间: 2014-7-2 16:28
标题: 数组名就代表了数组的地址这话怎么理解?
是不是讲如果数组名是sa, 该数组的内存地址里就包含sa的意思?
作者: fantacyleo    时间: 2014-7-2 16:32
数组名是个指针常量,它的值就是数组首个元素的内存地址
作者: x65396731    时间: 2014-7-2 16:49
谢谢,是我理解错了,是数组名的地址和该数组的首元素地址一样
作者: 子文    时间: 2014-7-2 23:02
应该不是啊!数组名指向的首个元素的地址,数组元素的分配地址是从小到大的。
作者: zhs    时间: 2014-7-3 12:57
不是,是数组名指向本数组所分配内存地址的首地址,相当于指针
作者: 肥柚๑    时间: 2014-7-4 19:48
数组名相当于数组第一个数的地址


作者: 忘了一切更好    时间: 2014-7-5 20:20
肥柚๑ 发表于 2014-7-4 19:48
数组名相当于数组第一个数的地址

也是此数组的地址
作者: 宋佳强    时间: 2014-7-5 21:10
定义数组时,系统将按照数组类型和个数分配一段连续的存储空间来存储数组元素,如int a[3]占据了连续的6字节存储空间(在16位编译器环境下,一个int类型占用2个字节)。要注意的是,数组名代表着整个数组的地址,也就是数组的起始地址

注意:其实a不算是变量,是个常量,它代表着数组的地址。上图把a放到变量一栏是为了方便大家理解数组结构。

数组a的地址是ffc1,a[0]的地址是ffc1,a[1]的地址是ffc3,a[2]的地址是ffc5。因此a == &a[0],即第一个元素的地址就是整个数组的地址


  1. //运行一下试试
  2. int sa[] = {1,2,3,4,5};
  3. if(sa == &sa[0]){
  4.   printf("数组名代表整个数组的地址,也就是数组首地址。");
  5. }else{
  6.   printf("数组名并不代表整个数组的地址。")
  7. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2