记住英文定义,你再也不会混淆C语言的指针数组、数组指针,函数指针、指针函数 |
您所在的位置:网站首页 › 指针英语翻译 › 记住英文定义,你再也不会混淆C语言的指针数组、数组指针,函数指针、指针函数 |
经常有小伙伴在求职面试过程中,会被问到C语言的基础问题,最令人抓狂的两个问题可能是:1)请说出指针数组和数组指针的区别; 2)请说出函数指针和指针函数的区别。 虽然小伙伴们有很丰富的开发经验,如果没有做好准备,突然面对这两个问题,也会大脑瞬间一懵。实际上,这些技术在项目开发中会经常使用,就是和名称没对应上。笔者最近仔细研究了下这两类问题,对比英文定义,发现根源还是我们的汉语博大精深(或者说语法不严谨),从而导致一堆绕口令式的“专业术语”,绕来绕去将人绕晕。 1)指针数组和数组指针 指针数组(Array of Pointers): int *array[10]; 如英文定义,是由Pointer组成的Array,本质是一个Array,Array中的每一个元素都是一个Pointer,如上面的例子,array[i]是一个指向int类型的指针。 数组指针(Pointer to Array): int (*array)[10]; 如英文定义,是一个指向Array的Pointer,如上定义,因为[]的优先级最高,需要对*array加括号,这个指针指向一个一维数组,array++,指针会向后偏移一维数组(int array[10])所占的空间。使用Pointer to Array,可以很方便实现二维数组。 2)指针函数和函数指针 函数指针(Pointer to Function): 函数指针在Linux中非常普遍,回调函数或处理函数都会使用 函数指针来定义,这样代码只需定义一个框架,程序实现时根据不同的需求传入不同的函数指针,可以实现类似高级语言多态的功能。 比如大名鼎鼎的signal函数,定义如下: typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); 在Linux的设备驱动中,open、read、write操作也是函数指针, static const struct file_operations fifo_operations = { .owner = THIS_MODULE, .open = dev_fifo_open, .read = dev_fifo_read, .write = dev_fifo_write, }; 指针函数(Function returnning Ponter): 看过英文定义,就能明白这是某些从业者主观臆造的的定义,也是很操蛋的定义。 C语言本身没有指针函数的概念,这个是指返回值是指针的函数,比如大名鼎鼎的 void *malloc(size_t size); 如果说上面三个概念还有作用,定义指针函数除了混淆视听之外,是毫无作用。既然将返回值是指针的函数定义为指针函数,那为什么不再定义整形函数、字符函数、void函数、结构体函数,从而覆盖所有类型范围值的函数呢?
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |