注册 登录
编程论坛 C语言论坛

数组元素地址问题

王连峰 发布于 2019-07-01 08:08, 2832 次点击
int main()
{
    int arr[]={1,2,3,4,5};
     printf(“%d\n”,sizeof(&arr);
     printf(“%d\n”,sizeof(&arr[3]));
   return 0;
}
同志们上述打印结果是多少呢?为什么,可以帮忙解答一下吗?不胜感激!
12 回复
#2
吹水佬2019-07-01 08:41
通常32位是4, 64位是8
#3
王连峰2019-07-01 08:55
回复 2楼 吹水佬
嗯嗯,那么printf(“%d\n”,sizeof(arr[3]));
printf(“%d\n”,sizeof(&arr[3]));这两者结果一样吗,我调过,结果是不一样的,我想知道第二个打印的大小是什么意思,有试过吗?
#4
吕孟伟2019-07-01 09:06
我打印出的是:
8
8
sizeof作用是返回对象所表示的字节大小,针对printf(“%d\n”,sizeof(&arr);这条语句,表达的意思是打印数组arr的地址所表示的字节大小,在我电脑上打印出的地址是000000000022FE30,所表示的十进制数是2293296,占据8个字节。
#5
王连峰2019-07-01 09:12
这是固定的吗?地址的大小都是固定8个字节大小吗
#6
rjsp2019-07-01 09:14
回复 3楼 王连峰
sizeof(arr[3]) 等同于 sizeof(int),因为 arr[3] 的类型是 int
sizeof(&arr[3])) 等同于 sizeof(int*),因为 &arr[3] 的类型是 int*
#7
rjsp2019-07-01 09:20
以下是引用王连峰在2019-7-1 09:12:52的发言:

这是固定的吗?地址的大小都是固定8个字节大小吗
对于不同的编译器(包括编译参数),那不一定,2、4、8、…… 等等都有可以;
在同一个编译器(包括编译参数),那么所有指针类型的字节长度都是一样的。比如都是2、4、8、……。(C++不是这样)
#8
王连峰2019-07-01 09:22
好的,谢谢各位同志🙏
#9
王连峰2019-07-01 09:23
回复 7楼 rjsp
明白了,谢谢
#10
wufuzhang2019-07-01 09:42
回复 楼主 王连峰
int main()
{
    int a=100;
    printf("%d\n",sizeof(a));            //结果=4,a是int数据,int的大小是4个字节(Dev-C++,Win7 64位)
   
    int arr[]={1,2,3,4,5};                //int数组,元素5个
    printf("%d\n",sizeof(arr));            //结果=20,数组arr的大小=4*5(有5个元素)
    printf("%d\n",sizeof(&arr));        //结果=8,数组地址的大小,因为是64位系统,所以地址占8个字节
    printf("%d\n",sizeof(&arr[3]));        //结果=8,数组元素地址的大小,地址也是占8个字节
    printf("%d\n",sizeof(arr[3]));        //结果=4,数组元素的大小,即int的大小是4个字节
   return 0;
}
#11
lin51616782019-07-01 11:10
一元 & 运算符
&arr
&arr[10]
等表达式是一个指针类型表达式
sizeof 指针类型表达式
结果得到的是 指针大小
至于指针多大 前面的版主介绍过了

在这里要强调一下
没有什么 数组的地址的大小 没有地址的大小 地址没有所谓的大小
#12
王连峰2019-07-01 15:39
回复 10楼 wufuzhang
谢谢
#13
王连峰2019-07-01 15:43
回复 10楼 wufuzhang
谢谢
1