编程学习小结(2)编程需要哪些基础知识

编码这么久,编码需要哪些基础知识呢?有人说“貌似不需要什么基础知识?我们公司只要是大学毕业,不管什么专业,在我们这搞一段时间都可以做的很好!”。的确很多公司,尤其是大公司,培训流程相对完善,工作流程也比较规范,无论是什么专业,即使编程0基础,在公司学习一段时间,掌握一些编码基础知识和编程规范后,随着对业务流程越来越熟悉,都可以做的很好,甚至比有基础的同学还好~
这里原因很多,很想听听大家的意见,从个人开发角度简单来看,可以认为进入公司后做技术也有两个方向
1、业务流程:行业相关性稍强,是对公司所进行业务的掌握程度,通信如各种协议等
2、技术能力:相对通用,对非流程问题的解决能力,如内存被改写,在业务上分析不出原因时,解决这类问题的能力

这里同同学们分享的主要是第二条,相对通用的能力。

首先看一个简单的问题:
在屏幕上输出10次hello world!
如何写:
方式 1、知道编程的同学
int main(int argc, char *argv[])
{
printf("hello world!"); printf("hello world!"); printf("hello world!"); printf("hello world!"); printf("hello world!"); printf("hello world!"); printf("hello world!"); printf("hello world!"); printf("hello world!"); printf("hello world!");
}
方式2、学过编程的同学
int main(int argc, char *argv[])
{
for(int i = 0; i < 10; ++i)
printf("hello world!");
}
方式3、某些同学
void out(int i)
{
if(i>1)
out(i-1);
printf("hello world!");
}
int main(int argc, char *argv[])
{
out(10);
}
对于上面的三种情况,提几个问题
1、为什么每种方式都有一个main函数,有哪些写法?
2、那种方式“较好”?
3、方式3有什么优点么?
……(欢迎提问)

问题1:为什么需要有这个main函数呢?
代码是人和机器交流的桥梁,当你写好一段代码,在windows上编译链接生成一个二进制的exe文件,它的内容是一条条机制指令,计算机加载这个文件开始执行;那么,问题来了,A:计算机如何知道这个文件是一个二进制文件,保存的是机器指令呢?它同word文档有什么区别?B:计算机知道这是一个程序二进制文件之后,如何加载?从那一条指令开始执行呢?
A:感兴趣的同学可以以文本的方式打开一个exe文件看下(直接将exe文件拖放到记事本中即可),会发现都是由MZ开头,16进制是4D5A,它是window可执行文件的特定格式的开始(PE格式)感兴趣的同学可以了解下。当系统遇到该格式时就按照PE格式的标准打开,加载,如何加载呢?(可以自行搜索下)
B:加载好了之后,从那一条指令开始执行呢?
对于C语言是由一个个函数组成,操作系统如何知道从哪一条指令开始执行来启动程序呢?操作系统代用那个函数开始执行啊?main……,为什么是main呢?
这个mian函数怎么写呢?
在 C语言的早期标准C89中,main() 是可以是void类型。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C programming Language(《C 程序设计语言》)用的就是void main( )。但最新的 C99 标准中,只有以下两种定义方式是正确的:
int main( void )
int main( int argc, char *argv[] )
如果你不需要从命令行中获取参数,请用 int main( void ) ;否则请用 int main( int argc, char *argv[] ) 。
main 函数的返回需要是 int ,这样返回值才能传递给操作系统。 如果没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入 return 0 ,表示程序正常退出。但是加上return 0是个好习惯。
这里涉及的知识有 操作系统、编译,如期望进一步了解编程,这些方面最好掌握一些~

问题2:那种方式较好?
这个很难说,但是方式1很少见,在这里很想听听小伙伴们的意见?

问题3:
这里使用了简单的递归算法,对于一些问题,使用该方式可以使代码变得简单,但是不是所有的语言都能够支持

(未完待续)

猜你喜欢

转载自blog.csdn.net/zhoudawei/article/details/57257665
今日推荐