“聪明”地简化

脑海翻滚,有意

恰好看到一文

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学生理解:
    • 指针数组。记住这个名词了,很关键的点,老师多次重复这个词,一定是记忆点,重点
    • 进一步,含义呢?
      • 指针,指向,“指向”是什么意思?
      • 数组,一排方格子。
      • 指针数组,有指针,还有数组,还有个数组指针,好像呀
    • 是数组,每一个元素都是一个指针。是指针,指向一个数组(大声)
    • 是数组,每一个元素都是一个指针。是指针,指向一个数组(重复)
    • 是数组,每一个元素都是一个指针。是指针,指向一个数组(三)
    • 是指针,指向一个数组。是数组,每一个元素都是一个指针(乱)
    • 是指针,指向一个数组。是数组,每一个元素都是一个指针
    • 是指针,指向一个数组。是数组,每一个元素都是一个指针
    • 几天后,再来一遍(反复几遍,烦,开始怪罪,本着不应该怀疑自己的原则,顺溜转入现状第二条)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值