【解答专贴1】有关编程

学习板块

Part 1

怎样才能算是真正掌握了一项技能?

引用 计算机人机交互领域的科学家Bill Buxton在他的文章 The Psychology of Cross Country 里的一句话:

A good way to test if someone is really skilled at a task is to see if they can do something else at the same time.

翻译过来就是:测试某人是否真得擅长某项任务,最好的办法是看他们能否在做这件事的同时做其他的事情。

通俗地来讲,一个人如果能够掌握某个技能,那么他能够熟练到不经过大脑都能实施这项技能。

那么如何达到这一点呢?

方法有三(包括但不只这三个):

  1. 不断地练习;
  2. 预演所有能想到的可能性;
  3. 通过适当控制、放慢速度提高自己掌握技能的质量。

如何提高自己的技能以达到掌握的程度呢?

一个人学习某项技能的过程就像在攀爬某个名叫技能的大山一样,通过脚踏实地的跨出每一小步(掌握每个“小”技能),最后爬到最高峰(“大”技能,即最终技能)。

所以如果想要提高自己的技能水平,我们需要“通过不断的练习,把那些低层次的问题都解决了,变成不用经过大脑的自动操作,然后才有时间和脑力来解决较高层次的问题。(技能的反面 - 魔方和模仿)”

如何理解编程是用来解决实际问题的?

软件开发不是闭卷考试一文中,我了解到,要想完成一个项目,基本要求有:

  • 深入了解客户需求
  • 详细规划任务安排
  • 队内良好沟通
  • 技术过硬

我们要知道,相关理论的开发最终目的都是为了实践,编程同样如此,我们需要注意到,将编程运用到实际问题上与做试卷是完全不同的,例如考题能直观的给你相关要求,然而实际开发的时候就不是了。所以在打编程基础时不能忽视从理论编程到实际编程的学习方向的变化。

Part 2

统计单文件c c++库(部分)中的代码“行数”

统计代码“行数”的代码

源代码来自我的博客“做中学”之关于我的系列调查(原创)。只需改动一处,即将开头定义的*head_name的初始化改成本次搜索的指定文件夹。

所统计的代码

所统计的代码来自CCAN里前五个文件解压后的总和(CCAN 在单文件c c++库的Other lists 列表下)。

结果截图

Part 3

会区分数组指针、指针数组、函数指针、指针函数,知道char ((x[4])())[4]这个声明中的x是什么东东吗?

数组指针、指针数组、函数指针、指针函数的区分

数组指针与指针数组

数组指针,例如int (*p)[10];,指的是指针变量指向了一个类型为int型的数组,数组里面每个元素都是int型的,不是指针。

指针数组,例如int *p[10];,指的是数组p中每个元素都是指针,而这些指针所指向的类型是int型,相当于定义了10个指向int型的指针变量。

函数指针与指针函数

函数指针,例如int (*fx)(int a[], int n);,指的是指针指向了一个返回值为int型的函数,定义的是一个指针变量。

指针函数,例如int *fx(int a[], int n);,指的是定义了一个返回值为int型指针的函数,定义的是一个函数。
-- 以上摘自我的博客“做中学”之关于我的系列调查

x: array[4] of pointers to functions returning pointer to array[4] of char

x ------->开始
x[4]------>数组
*x[4]----->数组里面存储的是指针
(*x[4])------>
(*x[4])()---->数组里面的存储的指针 指向函数
*(*x[4])()----->函数的返回值是指针
*(*x[4])()------->
(*(*x[4])())[4]---->函数的返回 的指针指向有4个元素的数组数组
char(*(*x[4])())[4]--->数组中的每个元素是char型的,所以函数的返回值是数组指针char (*s)[4]

-- 参考自CSDN论坛

  • 博主默默表示自己还需要学习一下这块,先把找到的解法贴在这里。。。

Part 4

数组复制,查找,排序C有相关库函数吗?有的话为何不用?有的话如何使用?

是有的,例如:

  • 二维数组复制可以用函数void *memcpy(void *dest, const void *src, size_t n);
  • 字符串复制可以用函数strcpy(str1,str2);
  • 数组查找可以用函数void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))
  • 字符串排序可以用函数void __cdecl qsort ( void *base, size_t num, size_t width, int (__cdecl *comp)(const void *, const void* ) )

博客“做中学”之关于我的系列调查中不用的原因:相较于我对这些库函数中某些函数的陌生程度,自己编写的话会更方便一点。

这些库函数的使用方法(对应):

原文地址:https://www.cnblogs.com/protectmonarch/p/6291136.html