数组、指针 相关的 sizeof 计算

一维数组

#include<stdio.h>
int main()
{
    int a[] = { 1, 2, 3, 4 };
    printf("%d\n", sizeof(a));//16  整个数组所占内存的大小
    printf("%d\n", sizeof(a + 0));//4  指向第一个元素的指针所占内存的大小(首元素地址的大小)
    printf("%d\n", sizeof(*a));//4  指向数组的指针所占内存的大小
    printf("%d\n", sizeof(a + 1));//4  指向第二个元素的指针所占内存的大小(第二个元素地址的大小)
    printf("%d\n", sizeof(a[1]));//4  指向第一个元素的指针所占内存的大小(首元素地址的大小)
    printf("%d\n", sizeof(&a));//4  指向数组的指针所占内存的大小
    printf("%d\n", sizeof(&a + 1));//4  指向a数组的下一个数组的指针所占内存的大小
    printf("%d\n", sizeof(&a[0]));//4  指向数组首元素的指针所占内存的大小
    printf("%d\n", sizeof(&a[0] + 1));//4  指向数组第二个元素的指针所占内存的大小
    printf("%d\n", sizeof(*&a));//16  整个数组所占内存的大小
return 0;
}

二维数组

#include<stdio.h>
int main()
{
    int a[3][4] = {0};
    printf("%d\n",sizeof(a[0]));//16  二维数组中以a[0]为首地址的一维数组所占内存的大小
    printf("%d\n",sizeof(a[0]+0));//4  二维数组中a[0][0]的地址所占内存的大小(指针的大小)
    printf("%d\n",sizeof(a[0]+1));//4  二维数组中a[0][1]的地址所占内存的大小(指针的大小)
    printf("%d\n",sizeof(&a[0]+1));//4  二维数组中指向以a[1]为首地址的指针所占内存的大小(a[1][0]的地址所占内存的大小)
    printf("%d\n",sizeof(*a));//16   二维数组中以a[0]为首地址的一维数组所占内存的大小(*a = *(a+0) = a[0])
    printf("%d\n",sizeof(a[3]));//16  二维数组中以a[3]为首地址的一维数组所占内存的大小
    printf("%d\n",sizeof(a+1));//4  a[1][0]的首地址所占内存的大小 
    printf("%d\n",sizeof(a));//48  整个二维数组所占内存的大小
    printf("%d\n",sizeof(a[0][0]));//4  数组中首元素的地址所占内存的大小
    return 0;
}

**

## **字符数组**

**

```cpp
#include<stdio.h>
#include<string.h>
int main()
{
    char name[] = "abcdef";
    printf("%d\n", sizeof(name[0]));//1  首元素的大小
    printf("%d\n", sizeof(&name));//4  指向name数组的指针所占内存的大小
    printf("%d\n", sizeof(*name));//1  指向char型指针所占内存的大小
    printf("%d\n", sizeof(&name+1));//4  指向name数组的下一个数组的指针所占内存的大小
    printf("%d\n", sizeof(name+1));//4  指向数组第二个元素的指针所占内存的大小
    printf("%d\n", sizeof(name));//7  整个数组所占内存的大小,还要加上'\0';
    printf("%d\n", strlen(name));//6  strlen 计算字符串的长度,以\0'为字符串结束标记
    printf("%d\n", strlen(&name));//6  代表整个数组的地址遇到'\0'停止
    printf("%d\n", strlen(&name + 1));//  随机数。(&name + 1)该数组的'\0',无法确定大小
    printf("%d\n", strlen(name + 1));//5  代表读取数组从b开始遇到'\0'停止
    return 0;
}
//sizeof 计算的则是分配的数组所占的内存空间的大小,不受里面存储的内容影响
//strlen 计算字符串的长度,以\0'为字符串结束标记。

指针

#include<stdio.h>
int main()
{
    char *p1 = NULL;
    short *p2 = NULL;
    int *p3 = NULL;
    float *p4 = NULL;
    double *p5 = NULL;
 
    printf("%d\n",sizeof(char));//1  char类型所占的内存大小
    printf("%d\n",sizeof(short));//2  short类型所占的内存大小
    printf("%d\n",sizeof(int));//4  int类型所占的内存大小
    printf("%d\n",sizeof(long));//4  long类型所占的内存大小
    printf("%d\n",sizeof(float));//4  float类型所占的内存大小
    printf("%d\n",sizeof(double));//8  double类型所占的内存大小
    printf("%d\n",sizeof(char*));//4  char型指针所占内存的大小
    printf("%d\n",sizeof(short*));//4  short型指针所占内存的大小
    printf("%d\n",sizeof(int*));//4  int型指针所占内存的大小
    printf("%d\n",sizeof(long*));//4  long型指针所占内存的大小
    printf("%d\n",sizeof(float*));//4  float型指针所占内存的大小
    printf("%d\n",sizeof(double*));//4  double型指针所占内存的大小
    printf("%d\n",sizeof(*p1));//1  指向char型指针:*p1所占内存的大小
    printf("%d\n",sizeof(*p2));//2  指向short型指针:*p2所占内存的大小
    printf("%d\n",sizeof(*p3));//4  指向int型指针:*p3所占内存的大小
    printf("%d\n",sizeof(*p4));//4  指向float型指针:*p4所占内存的大小
    printf("%d\n",sizeof(*p5));//8  指向double型指针:*p5所占内存的大小
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值