脑海翻滚,有意
恰好看到一文
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函数、结构体函数,从而覆盖所有类型范围值的函数呢?————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.youkuaiyun.com/Illina/article/details/95208028
我的本意
对于外文,意传递给学生过程:1原意-2原文-3读意-4转换-5译文-6老师理解-7师说-8学生理解
教学:
- 老师读的是译文,不清楚不理解,完蛋。1到5没有,6到8混乱
- 老师读了原文,理解,但也按照译文教学,自己是非常理解和明白原意,也认为这样讲学生也能理解原意。也就是5和7一致,没有6
- 学生直接读原文,理解原意,没有中间人,没有多人转义,人为咀嚼。不知道当时玄奘到西域是否也有同样感受
现状:
- 榆木脑袋,这么明晰简单,不理解?
- 教科书编的真烂,不讲人话。外文教科书编的多好,多么好理解
- 我翻译的多好,简单明了,朗朗上口。省去介词、动词修饰语,直接将名词活用为动词,或者说直接名词堆砌,不仅互文,还包含有一种结构美、建筑美。“枯藤老树昏鸦,小桥流水人家”,词美,字美,译美。加把劲,数组指针/指针数组,函数指针/指针函数,指针常量/常量指针,常量/变量/常变量,…,多么言简意赅呀!
勒夏特列:
- 译文和咀嚼并不一定是有害的,本土化,生活化,贴身场景化,更多实例和示例都可以帮助,快速,正确地理解新概念的含义。不能一棒子打死,关键在比例。
- 也可能是幸存者偏差。外文差的书没人看,传不远,流传不久,于是你看不到。好的书传得远,流传久,于是外文书你看到的都是“好”书。所谓“外国的月亮圆”大概是这样吧,虽然“月是故乡明”。
- 还有可能是“距离产生美”,距离也是上面能“偏差”的成因。没有了解,近距离,细致全面地接触,总是带有一种想象的朦胧美。没有得到的或者得不到的总是朝着美化的方向预估,结果也可能是叶公好龙,自己真正喜好的是想象中的那个,距离滋生想象。
结合一下
- 2原文:Array of Pointers
- 3读意:
- 由Pointer组成的Array。
- 每一个元素都是一个Pointer的Array
- 是Array,每一个元素都是一个Pointer
- 4转换:
- 由指针组成的数组。
- 每一个元素都是一个指针的数组
- 是数组,每一个元素都是一个指针
- 5译文:
- 由指针组成的数组;每一个元素都是一个指针的数组;是数组,每一个元素都是一个指针
- 指针数组(“聪明”地简化)
- 6老师理解:指针是定语,起修饰作用,数组是被修饰的名词。指针的数组
- 7师说:(和5译文没有区别)
- 由指针组成的数组;每一个元素都是一个指针的数组;是数组,每一个元素都是一个指针
- 指针数组(“省事”地沿用)
- 8学生理解:
- 指针数组。记住这个名词了,很关键的点,老师多次重复这个词,一定是记忆点,重点
- 进一步,含义呢?
- 指针,指向,“指向”是什么意思?
- 数组,一排方格子。
- 指针和数组,有指针,还有数组,还有个数组指针,好像呀
- 是数组,每一个元素都是一个指针。是指针,指向一个数组(大声)
- 是数组,每一个元素都是一个指针。是指针,指向一个数组(重复)
- 是数组,每一个元素都是一个指针。是指针,指向一个数组(三)
- 是指针,指向一个数组。是数组,每一个元素都是一个指针(乱)
- 是指针,指向一个数组。是数组,每一个元素都是一个指针
- 是指针,指向一个数组。是数组,每一个元素都是一个指针
- 几天后,再来一遍(反复几遍,烦,开始怪罪,本着不应该怀疑自己的原则,顺溜转入现状第二条)