鱼C论坛

 找回密码
 立即注册
查看: 5553|回复: 14

为什么数组名的值与数组名取地址的值是一样的

[复制链接]
发表于 2012-7-15 09:19:24 | 显示全部楼层 |阅读模式
1鱼币
#include<stdio.h>
void main()
{
    int a[10]={0},;
   
    printf("%d\n",&a);
    printf("%d\n",a);
}
这个代码输出的值为什么一样呢?数组名a里面放的是数组的首地址,怎么&a之后的值跟它一样

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-15 14:47:52 | 显示全部楼层
因为数组名存放的是他自己的地址,所以你无论取他的地址还是数组名的值,都是数组的地址。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-15 17:00:05 | 显示全部楼层

数组名是个常量还是变量呢?:loveliness:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-15 17:22:38 | 显示全部楼层
Tzdner_C 发表于 2012-7-15 17:00
数组名是个常量还是变量呢?

数组名不是一个变量,他只是一个地址,由编译器识别替换而已。事实上他只是个地址,名字只是方便我们使用和记忆~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-15 17:53:00 | 显示全部楼层
小甲鱼 发表于 2012-7-15 17:22
数组名不是一个变量,他只是一个地址,由编译器识别替换而已。事实上他只是个地址,名字只是方便我们使用 ...

int a[10] ;   &a何解?  sizeof(a ) == 40,何解?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-15 18:11:43 | 显示全部楼层
&a == a;
sizeof(a) == 40 * sizeof(int);
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-15 21:05:35 | 显示全部楼层
小甲鱼 发表于 2012-7-15 18:11
&a == a;
sizeof(a) == 40 * sizeof(int);

数据类型不同哦 你不可以完全不提这一点
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-16 01:10:38 | 显示全部楼层
数组名就是个指针
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-16 01:11:49 | 显示全部楼层
只能说明c语言很强大
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-17 12:50:29 | 显示全部楼层
小甲鱼 发表于 2012-7-15 18:11
&a == a;
sizeof(a) == 40 * sizeof(int);

&a == a  这个大家都知道  只是值相等而已  但是  &a+1   和 a+1   还能一样吗????             我问的是类型问题,值没有意义的, 还有 sizeof(a) == 40*sizeof(int)  这个不是算数学题,这个都知道,我问的是  你说 数组名只是一个地址,那么 为什么 sizeof(a) == 40  ,??
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-10-19 12:07:01 | 显示全部楼层
Tzdner_C 发表于 2012-7-17 12:50
&a == a  这个大家都知道  只是值相等而已  但是  &a+1   和 a+1   还能一样吗????             我问 ...

在《C和指针》p142中说到,在以下两中场合下,数组名并不是用指针常量来表示,就是当数组名作为sizeof操作符和单目操作符&的操作数时。 sizeof返回整个数组的长度,而不是指向数组的指针的长度。 取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某个指针常量的指针。
所以&a后返回的指针便是指向数组的指针,跟a(一个指向a[0]的指针)在指针的类型上是有区别的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-10-19 12:24:57 | 显示全部楼层
小甲鱼 发表于 2012-7-15 14:47
因为数组名存放的是他自己的地址,所以你无论取他的地址还是数组名的值,都是数组的地址。

小甲鱼老师:
   int   array[]={1,2,3,4};
    cout << array << endl;
    cout << *array << endl;
    按你的说法, &array == array; 那么就应该有 *array == array, 但array输出的是地址,而*array输出的是数组第一个元素1。 *array != array啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-10-19 14:16:07 | 显示全部楼层
仰孝翔 发表于 2012-10-19 12:24
小甲鱼老师:
   int   array[]={1,2,3,4};
    cout

*是取值符&才是取地址符
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-10-19 14:17:28 | 显示全部楼层
论坛有没有C的群啊 我也再学C大家可以讨论下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-10-19 15:06:14 | 显示全部楼层
对于数组而言,数组名就是地址,但是a与&a还是有些不同,a为数组首元素的地址,&a是数组的首地址。就像虽然湖北省ZF在武汉,武汉市ZF也在武汉一样 ,地址相同,意义不一样。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 04:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表