指针基础知识点合集6.1(基础入门到深入理解)

知识特点(学习方向)

上一篇介绍了更深一步的指针,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个字节

完-

今天的分享就先到这里,每篇涉及的知识点不是很多但都十分相信,希望对大家有所帮助,有什么问题或者指教都可以提出来哈,记得点赞关注哦!

小预告(明日老时间分享):

指针例题解析等内容

祝大家工作顺利,学业有成!!!

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值