指针是C语言中最难理解和最难学习的一个知识点,再加上C指针往往跟数组、结构体、函数混在一起,暧昧不清,使得C指针的使用更加困难和棘手。很多C语言学习者、研发者往往“望指兴叹”:为了减少出错,能不用坚决不用。但C指针作为C语言最精华的一部分,不使用C指针如何编写一个高效高质量的程序呢?
本期课程为《C语言嵌入式Linux高级编程》第6期,从一个全新的视角:数据存储的角度,去重新解析C指针。存储才是C语言的精髓,在存储面前,一切指针、链表、函数、变量都是浮云。抛开各种类型数据、函数、数据结构的表象,理解他们在内存中的存储才是我们理解C指针的关键。
本期课程从存储的角度,由浅入深,层层递进,一步一步去探讨讲解C指针,重点学习:指针的基本概念、如何使用指针去操作变量、数组、结构体、函数。各种类型的指针作为函数参数时,如何使用,如何解析等等。学习完本教程,预期会解开了心中很多疑惑,比如:
1)为什么计算机使用补码存储数据?为什么补码设计为反码+1?
2)一个字一定占4个字节吗?这是由谁决定的?
3)为什么会有大端模式、小端模式?
4)为什么很多地方会使用size_t这种数据类型?
5)变量和变量名的本质是什么?
6)指针和地址是一个概念吗?指针是什么类型?
7)int (*f)(int *p, int, int (*fp)(int*,int));你能分析出来吗?有没有好用的方法?
8)如何快速记住运算符的优先级?
9)为什么指针可以使用[]访问数组?
10)为什么数组可以使用间接访问符:*来访问数组?
11)数组名是一个常量指针吗?
12)二级指针主要用在什么地方?可以使用二级指针操作二级数组吗?
13)void *你会用吗?