C中的 小问题 来个人 帮下忙

来源:百度知道 编辑:UC知道 时间:2024/06/24 07:51:43
有 如下 定义:
int a[5];
&a和a 都是同一个地址 这是怎么回事
而 &a+1 似乎是加了 整个数组的长度 这又是杂回事
a + 1 那就是a[1]的地址 ;
请 高手 不吝 赐教
给来个全面 简单 易懂 的说法 辛苦 大家了
谢谢 了 谢谢了
大家说的我更 蒙
我是这样干的
#include<stdio.h>
#define N 5
void main()
{
int a[N]={0,1,2,3,4};

printf("%d,%d\n",&a+1,&a[0]);
}
结果不一样 还有 &(a+1),也行不通啊
我得了个结果是1245056 1245036
前一个 不是似乎 加了整个 数组
高手 给 说说贝

如下定义:
int a[5];
&a和a 都是同一个地址,但意义不同:
a可以看成是int*类型的指针,就是a[1]的地址
而&a是int (*)[5]类型的指针,是a[5]的地址(最后一个元素a[4]的下一个)

补充:
#include<stdio.h>
#define N 5
void main()
{
int a[N]={0,1,2,3,4};

printf("%d,%d\n",&a+1,&a[0]);
}
结果当然不一样了
&a+1相当于&a[5],不可能跟&a[0]一个值的

第一个问题:数组名代表数组的首地址,所以&a和a都是指向数组第一个元数。
第二个问题:数组名在一般情况下可以当作指针来用,加减一个整数等于指针前进或后移一段内存。即a+1=a[1];

这些都是c语言的基础啊,楼主还要加油学习,多看点书

这是数组里面的,具体我忘记了

在C语言或C++里数组名就表示数组的首地址,也就是第一个元素的地址,所以a表示的就是数组首地址,而&是取地址运算符,&a表示的就是数组a的地址,而数组的地址和首地址是同一个地址,所以&a和a 都是同一个地址;&a+1这个式子首先运算&a结果是数组a的地址,这时再+1表示的就是跳过整个数组后的下一个地址(数组的地址和首地址在这里就有区别了,也就是说&a和a地址一样,但+1之后所代表的地址就不同了,这个1如果加在数组地址&a后面,表示偏移量是一个数组,而加在数组首地址a后面偏移量是一个元素),这和a+1是不一样的,a+1指下一个元素的地址,也就是a[1]的地址,并没有增加数组长度。我刚才查了下书,之前也一直不知道这个,还要感谢你啊,学到东西了。

关键还是在+1上面了,对于数组地址&a而言+1表示得是一个数组的偏移量(int型数组一个元素4字节,5个20字节)20字节;而对于数组首地址a而言表示一个元素的偏移量(1个int 型元素4字节)

就好比你定义一个int 型数组 +1偏移的就是4字节,如果