指针————sizeof/strlen中参数含义

这篇文章主要总结了一系列的sizeof和strlen常见的参数含义。

一、数组

int a[]={1,2,3,4};
1.sizeof(a);//4*4=16bit
2.sizeof(a+0);//4/8bit
3.sizeof(*a);//4bit
4.sizeof(a+1);//4bit
5.sizeof(a[1]);//4bit
6.sizeof(&a+1);//4/8bit
7.sizeof(&a[0]);//4/8bit
8.sizeof(&a[0]+1);//4/8bit
9.sizeof(&a);//4/8bit
10.sizeof(*&a);//4*4=16bit

我们知道数组名都代表数组首元素的地址,二维数组名代表第一行数组的地址。但有两个例外:如果在sizeof内部的数组名代表整个数组的地址;在&后面的数组名也代表整个数组的地址。只要是地址,大小就是4或8个字节。

1.a原本是数组名代表首元素地址,但在sizeof内部,所以代表整个数组的地址,由于是int类型,且一共有4个元素,大小就是4*4=16字节

2.a+0代表数组第一个元素的地址,只要是地址就是4或8个字节

3.*a代表第一个元素,第一个元素是int类型,所以大小为4个字节

4.a+1代表数组第二个元素的地址,只要是地址就是4或8个字节

5.a[1]代表数组第二个元素,为int类型,所以大小是4个字节

6.&a+1中&a代表整个数组的地址,+1后跳过整个数组,但仍然是某一个元素的地址,是地址就是4或8个字节

7.&a[0]代表首元素的地址,也是地址,那么就是4或8个字节

8.&a[0]+1代表第二个元素的地址,是地址就是4或8个字节

9.&a中就是我们前面讲的整个数组的地址,只要是地址就是4或8个字节

10.*&a代表先取出整个数组的地址,再对它解引用那么还是整个数组,所以大小为4*4=16个字节

二、字符数组

char arr[]={'a','b','c','d','e','f'};
1.sizeof(arr);//6bit
2.sizeof(arr+0);//4/8bit
3.sizeof(*arr);//1bit
4.sizeof(arr[1]);//1bit
5.sizeof(&arr);//4/8bit
6.sizeof(&arr+1);//4/8bit
7.sizeof(&arr[0]+1);//4/8bit

1.arr在sizeof内部即代表整个数组,整个数组为char类型只有1个字节,故有6个元素就是6*1=6个字节

2.arr代表首元素的地址

你可能感兴趣的:(基础学习,c语言,数据结构,算法)