知识特点(学习方向)
上一篇介绍了更深一步的指针,6.1 6.2将分别介绍数组和指针笔试题等一些知识点,每篇内容不多很好理解,相信大家看完这几篇之后会对指针的理解有质的飞跃
深入理解未来会继续连更1篇,如果需要可以先关注。
每一个知识点都讲的很细节,已经学明白并掌握第一节指针基础知识点合集1,2,3,4,5(侧边有合集栏)的同学让我们一起继续深一步的学习。
多运用类比,希望大家能和前面知识点联系起来,多比较,多研究,祝大家学习愉快。
1.⼀维数组
int a[] = {1,2,3,4};
1.printf("%d\n",sizeof(a));
2.printf("%d\n",sizeof(a+0));
3.printf("%d\n",sizeof(*a));
4.printf("%d\n",sizeof(a+1));
5.printf("%d\n",sizeof(a[1]));
6.printf("%d\n",sizeof(&a));
7.printf("%d\n",sizeof(*&a));
8.printf("%d\n",sizeof(&a+1));
9.printf("%d\n",sizeof(&a[0]));
10.printf("%d\n",sizeof(&a[0]+1));
1.16 sizeof(数组名是整个数组)
2.首元素地址,地址就是4或者8
3.a是首元素地址*a就是首元素,大小就是4个字节
4.a是首元素的地址,a+1跳过一个整型,就是第二个元素地址就是4/8
所以说首先第一步就是需要判断是否是地址
5.a[1]是第二个元素,4
6.&a是数组的地址,地址就是4/8.根据编译器决定
7.*&互相抵消了,那么就是相当于第一题了
8.&a+1是跳过整个数组后的地址,是地址就是4/8
9.首元素的地址,4/8
10.数组第二个元素的地址,4/8
2.字符数组
char arr[] = {'a','b','c','d','e','f'};
1.printf("%d\n", sizeof(arr));
2.printf("%d\n", sizeof(arr+0));
3.printf("%d\n", sizeof(*arr));
4.printf("%d\n", sizeof(arr[1]));
5.printf("%d\n", sizeof(&arr));
6.printf("%d\n", sizeof(&arr+1));
7.printf("%d\n", sizeof(&arr[0]+1));
1.数组名单独放在sizeof内部了,计算的是数组的大小,单位是字节6
2.arr数组名表示首元素的地址,4/8
3.arr是首元素的地址,*arr就是首元素,大小1;
4.arr[1]是第二个元素,大小也是1;
5.&arr是数组地址,4/8(不是数组就比其他厉害,只要是地址都是4、8由编译器决定)
6.跳过整个数组,指向了数组后边的空间,4/8
7.第二个元素的地址,4/8
char arr[] = {'a','b','c','d','e','f'};
1.printf("%d\n", strlen(arr));
2.printf("%d\n", strlen(arr+0));
3.printf("%d\n", strlen(*arr));
4.printf("%d\n", strlen(arr[1]));
5.printf("%d\n", strlen(&arr));
6.printf("%d\n", strlen(&arr+1));
7.printf("%d\n", strlen(&arr[0]+1));
1.没有\0就会导致越界,结果是随机的
2.arr+0是数组首元素的地址,同上
3.'a'值是97,代码传给strlen会得到野指针,代码是有问题的
4.同上
5.起始位置是数组的第一个元素的位置,随机值x
6.同上x-6
7.第二个元素开始向后统计,得到的也是随机值x-1;
3.⼆维数组
int a[3][4] = {0};
1.printf("%d\n",sizeof(a));
2.printf("%d\n",sizeof(a[0][0]));
3.printf("%d\n",sizeof(a[0]));
4.printf("%d\n",sizeof(a[0]+1));
5.printf("%d\n",sizeof(*(a[0]+1)));
6.printf("%d\n",sizeof(a+1));
7.printf("%d\n",sizeof(*(a+1)));
8.printf("%d\n",sizeof(&a[0]+1));
9.printf("%d\n",sizeof(*(&a[0]+1)));
10.printf("%d\n",sizeof(*a));
11.printf("%d\n",sizeof(a[3]));
1. a是数组名单独房子sizeof内部,计算数组大小单位48个字节;
2.第一个元素大小4个字节;
3.第一行数组名,16计算一维数组大小;
4.元素地址,大小4/8
5.表示第一行第二个元素;
6.跳过第一行的地址4/8;
7.计算第二行大小16;
8.表示第二行地址4/8;
9.地址4/8
10.*a第一行·16;
11.并未存在因此通过类型推,第4行数组名,计算的是第4行大小,16个字节
完-
今天的分享就先到这里,每篇涉及的知识点不是很多但都十分相信,希望对大家有所帮助,有什么问题或者指教都可以提出来哈,记得点赞关注哦!
小预告(明日老时间分享):
指针例题解析等内容
祝大家工作顺利,学业有成!!!