本帖最后由 姚麦 于 2012-11-12 22:45 编辑
#这篇教程的主旨不是让你学过了,就可以去DIY了,更不是主讲DIY,我甚至可以说这个帖子和DIY仅有很小的关联,那为神马需要这个帖子的存在?在你看过DIY教程后,你是否只是知道怎么去改极易,特效的几率,而不知道是怎样实行成功,背后原理。对头,我的目的就是如此,让大家除了会DIY,还要懂DIY。当然了,如果你不需要,认为没必要,自然不用看。
另外,本教程也不会完整的讲C,只是讲一些浅显,常用的,跟DIY,LUA能联系到一起常用的语法。事实上,你想掌握C,光看我这一个教程没有用,那是需要大量的信息,实战,书籍去攻克的。
为神马要写这么一贴教程?
呃,好吧,刚才翻了翻DIY教程贴,各位大侠们写的都很实用,也很贴切,只是关于基础的东西都是写的懵懵懂懂,一笔带过,新人们上手是可以很快,可对于基础知识的缺乏,是很难避免犯错的。
于是,LZ在这里自以为是的写一点语法知识,那么,先开始好了。
众所周知,LUA是基于C衍生的脚本语言。
虽说LUA在语法上的一些应用有区别于C,但是大部分的思想,以及结构,都是与C一脉相承的。
例如变量,常量,分支语句,顺序结构,数组,函数等等,如果你想做好DIY,C的基础不用多学,包括C的真正精华指针都不用学,只学会这些基础的语法,然后看一些LUA与C的具体区别,然后,你就可以开动了。
今天先讲变量与常量的区别。
我先拿一段C的程序来举例子,再讲与LUA的区别。
#include<stdio.h> /*程序开始,头文件调用stdio.h,也就是标准输出输出库,这个我们以后讲,现在不必深究*/
int main () /*声明主函数为空函数*/
{
int a,b,c; /*定义三个变量a,b,c*/
a=1; /*给a赋值为1*/
b=2; /*给b赋值为2*/
c=a+b; /*c是a和c的和*/
printf("a和b的和是%d",c); /*调用stdio.h文件中的printf,也就是输出函数*/
return 0;
}
这就是一段完整的小程序了,他用来做什么呢?
也许没什么实用性,他仅仅是算出A+B的和,一道最简单的加法算数程序。
那么里面都包含了一些什么东西呢?我们逐步来讲。
#include<stdio.h> 这段是关于库函数调用,这个比较深,暂且不必管,以后会讲到,眼前我们只需要知道,C的程序开头,凡是你想要在程序当中让用户看到一段字符,或者是打入一段字符,必须要用#include<stdio.h> 做开头,大部分程序也都是用#include<stdio.h> 做开头,除却一些不需要输出输入的小单片机产品。
int main () /*声明主函数为空函数*/这段是每一个程序都需要的,我们可以暂且这样理解程序,程序是由一个接一个不同公 用的函数组成,每个函数实行不同的功能,他们之间也许有交叉,也许没交叉。程序里可以有许多函数,也可以一个函数都没有,但惟独必须有的,就是这段主函数。
补充内容 int main后面跟了一对括号(),为神马需要这段括号呢?因为每个函数都需要函数参数,函数过程中最后会产生一个值,也就是函数返回值,这个暂时大家不用学习,了解下就可以,至于()里面什么都没有,就是证明这段函数是空函数,不接受任何返回值,实际上,我们空函数还有一种表达方式,int main(void),void是空的意思,也就是说没有函数参数,不接受返回值,不过在日常程序当中,这句void可以直接省略,日后讲到函数,会陆续讲函数参数,大家不要着急。 补充结束
举一个例子,一套完整的程序是一颗大树,那么函数就是他的分叉树枝,那谁是他的树杆呢?就是主函数,主函数就像人体的大脑,没有大脑,我们有再好的计划,也无法实施。
如果你还不懂的话,没关系,我们暂且跳过,只需要知道,程序当中必须要有主函数既可。
接下来是一段
{
int a,b,c; /*定义三个变量a,b,c*/
a=1; /*给a赋值为1*/
b=2; /*给b赋值为2*/
c=a+b; /*给ab相加的和赋值给c*/
printf("a和b的和是%d",c); /*调用stdio.h文件中的printf,也就是输出函数*/
return 0;
}
这段话也就是主函数的内容,你可能注意到了,内容在开始前后,有{}这样的两个字符,他代表着一段程序的开始与结尾(有时复合语句也用{}花括号包起来,不过暂时不用管),而在LUA里,也就是我们的DIY,函数的内容开始结尾不再用{}来表示,而是DO,END,这个大家可以去注意一下。
接下来,iint a,b,c; /*定义三个变量a,b,c*/,是什么意思呢?int是声明的意思,每次你想用一个变量,并不是可以随意创造的,你必须先声明他,通知你的编译器和程序,这有一个变量,变量的数值不能固定,所以变量要有一个名字,好让你去找到他,分辨他。这里的a,b,c就是三个变量的名字。
int a,b,c;的意思也就是说定义,通知程序这里有名字叫做,a,b,c的三个变量。
接下来,既然程序已经知道有a,b,c三个变量了,但是要这三个变量有什么用呢?可以这样说,程序就是算法,算法就是各种数学加减乘数,我们用数学来解决各种问题。
这个程序的作用就是要这个程序去计算,两个数值相加起来会有多少。下面,就需要赋值了,赋值,给变量一个值,他们才能计算,所以后面就引发出了,a=1;b=2;c=a+b;这段。
请记住,赋值也就是=,和我们平常说的“等于”绝不相同,赋值大概的意思是说,给这个变量一个值,但是并不固定,所以叫做赋值,C也好,LUA也好,真正的“等于”,也就是我们日常的=,实际上的表达符号是==,这个我们以后再讲,现在只是要分清楚就好,不要在DIY的过程当中犯下等于和赋值的概念错误。
printf("a和b的和是%d",c); 这一段函数说的是要让在程序向屏幕输出一段字符,实际上,运行此程序后,程序输出的字符该是:a和b的和是3。
补充内容 因为LZ现在手里的电脑没安装编译器,所以不给大家示范了,有兴趣的可以下载一个VC++编译器自己运行下程序试试。“""”里的内容是实际上要输出的,而后面的%d是格式控制符,是代表和变量的类型相对应,%d代表着十进制整形数(就是我们正常说的数字,1,2,3,4等),%d要覆盖的内容则是""号外面的那个C,所以输出的并不是%d,而是变量c的值。 C的数据类型是日后的内容。
return 0;这句就要联合我们上面讲的函数返回值,大家已经知道了,函数是需要返回值的,那么这个值要怎么返回?就要通过return这个关键字,你想返回哪个值,就在return 后面写上,这个的具体细节也要留到函数里讲,大家暂时写小程序的时候,只暂时记得用return 0;就好。
有一点要注意的,C的每一个语句结束时都要加上;,而lua则不用。
补充结束
各位大侠总是在教程里说着变量,大家可能觉得很高深,事实上变量是程序源码当中最常见的,为神马他不叫定量,不叫量,非得叫变量呢?
因为变量并不是固定的数值,他是可以随之改变的,至于变量的定义,在至今的标准C当中都没有过,不过为了大家,我可以勉强解释一下什么是变量。
变量是暂时储存在内存当中的一段数值,他有可能会随着其他变量数值的改变而改变,就好比说,a+b的和是3,那么c的值暂时是3,如果a和b的值变化了呢?变量C就不再是3了。
所以说,变量,常量,等于,赋值,这几个概念,一定要弄清楚。
(未完待续,明天继续)
今天更新主要讲常量,运算符还有补充一下上次讲的不到位的知识点,上次没讲好的,我会在上面补充,请从新阅读下上面的段落,下面的内容是完全的新东西,等教程完成一定规模后,我会重新整理分贴,让大家有个好的阅读体验。
这段程序开始前,我先不写注释,大家尽量先自己思考下,思考不出来再往下看,下面会有详尽的解释,不过我希望大家最好能自己先思考一下,这样有助于你的学习习惯。
#include <stdio.h>
#define MI 2
int main()
{
printf("%d的二次幂为%d",MI,MI*MI);
return 0;
}
这段的程序是做什么的呢?好吧,如果你没猜到的话,我会告诉你,这是一段计算幂的程序。
相比之前的例题,我们这里少了一段赋值语句,多了一句不知所谓的#define MI 2。
为神马呢?因为今天的主题是常量,所以,我们暂且把变量扔到一边,来用常量。
神马是常量呢?常量顾名思义,就是经常,固定,不改变的量。那常量要如何定义呢?其实常量有几种定义方式,不过我们现在只挑最简单,最好理解的来讲。也就是用define!
我先试图模仿一下这段程序运行出来的效果:2的二次幂为4。
你会想了,不对阿?明明那段字符里写的是%d的一次幂是%d,怎么会出来2了呢?好吧,如果你有这个疑问,我只能先说一点,上面新补充的关于%d的内容希望你先看一下。%d是格式控制符,是替代同等类型常量,变量名在输出函数当中的格式控制符,也就是说,第一个%d,对应的是后面的第一个常量MI,第二个%d的代替的是后面的第二个常量算数MI*MI。
对的,你想对了,常量变量不只可以单用名字调用,表达式也可以(也就是MI*MI的这个乘法运算)。
之前讲过,变量的声明是用int+变量名来表示(注意,实际中没有+这个符号,Int 和变量之间用空格隔开,而且Int只是C的数据类型的其中一种,用来表示整数,其他的还有小数点float等,下一章会讲),那么常量如何表示呢?就是在文件预处理命令的下面加上这么一段#define 常量名 数值.
例子:#define SHENGRI 1988
这就代表着用一段SHENGRI的字符代替了1998这段数值,常量和变量的储存方式并不一致,这个以后会讲,暂且知道定义常量是这么定义就好了。
常量的名随便起,(规范叫法是标识符)除了关键字外,但是最好用大写英文字母来代替,以区别变量,这个没有明文规定要求,但却是一个好的习惯,像我上面示例的两个常量,MI,SHENGRI.
那么我们也就好理解下面的输出函数了。
printf("%d的二次幂为%d",MI,MI*MI);
第一个%d代表和后面的那个MI对应,第二个%d和后面的MI*MI对应,所以输出就是2的二次幂为4.
下面我们完整的捋一下这段程序。
#include <stdio.h> /*程序开始,调用标准输入输出IO库,这个应该不用讲了吧?偷笑*/
#define MI 2 /*定义名为MI的常量,MI的值代替成为2*/##注意,常量也不能用等于,而是代替,以后会具体提到。
int main() /*主函数开始,为空函数*/
{
printf("%d的二次幂为%d",MI,MI*MI); /*输出计算*/
return 0; /*返回值为0,主函数结束*/
}
这样完整的一看,大家就该懂了吧。可能大家依然有的问题是存在于*这个字符的作用上,是的程序源码中的*代表着我们日常用的乘法符号,其实我们的加减乘除都可以直接套用在表达式当中的,如乘*除/加+减-,大家直接用就好,关于算数符号的具体用法,会在以后的实例中逐渐讲解。
|