sizeof大合集(二)

    int a[] = "abcdef";
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(a+0));
	printf("%d\n", sizeof(*a));
	printf("%d\n", sizeof(a[1]));
	printf("%d\n", sizeof(&a));
	printf("%d\n", sizeof(&a+1));
	printf("%d\n", sizeof(&a[0]+1))

 char a[] = "abcdef";
  sizeof(a)                末尾存在\0,大小为7


  sizeof(a+0)            a是首元素地址,a+0还是首元素的地址,大小是4或者8


  sizeof(*a)               a是首元素地址,*a是首元素,即‘a’,大小为1


  sizeof(a[1])             a[1]是数组第二个元素,即‘a’,大小为1


  sizeof(&a)               &a取得是整个数组的地址,大小为4或者8 


  sizeof(&a+1)            &a取得是整个数组的地址,+1表示向后跳过整个数组产生的一个地

                                  址,大小为4或者8 
  sizeof(&a[0]+1)        &a[0]表示第一个元素的地址,+1表示第二个元素地址,大小4或者8 

    char* p = "abcdef";
	printf("%d\n", sizeof(p));
	printf("%d\n", sizeof(p+1));
	printf("%d\n", sizeof(*p));
	printf("%d\n", sizeof(p[0]));
	printf("%d\n", sizeof(&p));
	printf("%d\n", sizeof(&p+1));
	printf("%d\n", sizeof(&a[0]+1))

 char* p = "abcdef"
  sizeof(p)               p是指针变量,指针变量大小为4或者8


  sizeof(p+1)            p是首元素地址,p+1是第二个元素的地址,大小是4或者8


  sizeof(*p)               *p是首元素,即‘a’,大小为1


  sizeof(p[0])             p[0]是数组第二个元素,即‘a’,大小为1


  sizeof(&p)               &p取得是指针变量p的地址,大小为4或者8 


  sizeof(&p+1)           &p取得是指针变量p的地址,+1表示向后跳过p的地址,仍为一个地

                                  址,大小为4或者8 
  sizeof(&p[0]+1)        &p[0]表示第一个元素的地址,+1表示第二个元素地址,大小4或者8 

    int a[3][4]={0};
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(a[0][0]));
	printf("%d\n", sizeof(a[0]));
	printf("%d\n", sizeof(a[0]+1));
	printf("%d\n", sizeof(*(a[0]+1)));
	printf("%d\n", sizeof(a+1));
	printf("%d\n", sizeof(*(a+1)));
    printf("%d\n", sizeof(&a[0]+1));
    printf("%d\n", sizeof(*(&a[0]+1)));
    printf("%d\n", sizeof(*a);
    printf("%d\n", sizeof(a[3]));

int a[3][4]={0}
  sizeof(a)               a单独放在sizeof内部,计算的是整个数组的大小,大小为3*4*4=48


  sizeof(a[0][0])           第一行第一个元素的大小


  sizeof(a[0])              a[0]是第一行的数组名,单独放在sizeof内部,大小为4*4=16


  sizeof(a[0]+1)           a[0]表示第一行首元素地址,+1表示第一行第二个元素地址,4或者8 


  sizeof(*(a[0]+1))             第一行第二个元素,大小为4个字节


  sizeof(a+1)           a表示首元素地址,首元素地址就是第一行的地址,+1变成第二行地址

                                大小为4或者8 
  sizeof(*(a+1))      对第二行地址解引用,访问的是第二行,大小为16

sizeof(&a[0]+1)         第一行地址+1为第二行地址

sizeof(*a)                  a为首元素地址,为第一行地址,解引用为第一行,大小为16

sizeof(a[3])                类型为int[4],大小为16 

猜你喜欢

转载自blog.csdn.net/m0_63742310/article/details/123597324