关于数组地址和大小的计算

这是在x64环境下输出的

#include <stdio.h>
//sizeof(数组名),数组名表示整个数组,计算的是整个数组的大小
//&数组名,数组名表示整个数组。取出的是整个数组的地址
//除此之外,所有的数组名都是数组首元素的地址
int main()
{
    int a[] = { 1,2,3,4 };
    printf("%d\n", sizeof(a));//16
    //4个元素,一个整形一个字节,4*4=16
    printf("%d\n", sizeof(a + 0));//8
    //这个就是首元素地址
    printf("%d\n", sizeof(*a));//4
    //a是首元素地址,然后解引用,*a就是首元素,大小就是4字节
    printf("%d\n", sizeof(a + 1));//8
    //第二个元素的地址,首元素地址+1
    printf("%d\n", sizeof(a[1]));//4
    //第二个元素大小
    printf("%d\n", sizeof(&a));//8
    //&a是整个数组的地址
    printf("%d\n", sizeof(*&a));//16
    //&a表示整个数组的地址,然后解引用,就是整个数组,16个字节
    printf("%d\n", sizeof(&a + 1));//8
    //&a是整个数组的地址,然后加一,跳过整个数组,还是一个数组的地址
    printf("%d\n", sizeof(&a[0]));//8
    //第0个元素的地址
    printf("%d\n", sizeof(&a[0] + 1));//8
    //第二个元素的地址

下面是用sizeof来计算sizeof的大小,它是会根据环境的变换而变换的

sizeof是size_t类型,就是无符号整形,但是和unsigned又有点区别,unsigned是不会根据环境的改变而改变的

虽然 size_tunsigned int 都表示整数类型,但它们是不同的类型。 size_t 是无符号整数类型,通常被用于表示内存中对象的大小或数量,例如数组的大小。而 unsigned int 也是无符号整数类型,但它的大小通常是固定的,而不是根据特定的平台或编译器而变化。在一些情况下,这两种类型可以互相转换,但在其他情况下,它们不能互换使用。例如,如果你想要使用 sizeof 运算符来获取一个对象的大小,那么你应该使用 size_t 类型而不是 unsigned int 类型。

x64

strlen需要\0,但是sizeof不需要

把上面相同的代码换成strlen来输出,比较两者的不同

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值