第一章, C语言的一些基础
(1)
在学习PHP的时候你可能不用知道什么是数据类型, 就算PHP有很多数据类型如: “字符串类型”, “整数类型”, “浮点型类型”等, 但是PHP的数据类型跟C语言的数据类型还是有很大差别的. 为什么这样说? 因为PHP把C语言的数据类型抽象化了. 下面我们想来学习一下C语言的数据类型吧.
PHP是弱类型语言, 而C语言是强类型语言, 也就是说如果你想使用C语言的变量, 那么你首先要知道变量的类型. 而不像PHP那样变量可以是任何的类型. 另外如果你想使用C语言的变量, 那么你必须先声明这个变量, 然后才可以使用. 如下:
int ivar;
ivar = 10;
如果你没有声明而直接使用变量, 编译会不通过, 如下是错误的:
ivar = 10;
因为PHP不用声明变量就能使用, 所以PHP程序员写C程序时要特别注意声明变量. C语言声明的方式是:
类型 变量名;
如:
int ivar; //定义一个名为ivar的整型变量
char cvar;//定义一个名为cvar的字符型变量
float fvar;//定义一个名为fvar的浮点型变量
double dvar1, dvar2, dvar3;//定义3个双精度类型的变量
long lvar1, lvar2, lvar3;//定义3个长整型的变量
从上面看到C语言还可以使用类型 变量名, 变量名, 变量名…;这种声明方式.
好了, 看完C语言的声明方式, 现在我们来学习一下C语言的基本数据类型吧.
C语言的基本数据类型还不是很多, 有以下的几种:
char: 字符型类型, 占8位(一个字节)
int: 整型类型, 占32位(32位平台下)
short: 短整型类型, 占16位
long: 长整型类型, 占32位(32位平台下)
float: 单精度浮点型, 占32位
double: 双精度浮点型, 占64位
基本上C语言就只有这几个基本数据类型了, 上面所说到的位就是计算机里面的最小单元, 一个位只能是0或者1. 8位就像这样:[1][1][1][1][1][1][1][1]. 而能够保存的最大数值为20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 = 255.所以一个字符型的变量可以保存0 – 255的整数.
另外因为C语言的数字是有正数和负数的, 所以C语言有两个专门来描述正负的关键字unsigned和signed, unsigned表示数字是没符号的(就是正数). signed表示有符号(可正可负), 而不加unsigned的都默认为有符号的. 所以上面所说的类型都是有符号的, 因为符号需要用一个位来表示, 所以8位大小的数据只能使用7位来保存数据, 一个位表示符号了. 也就是说char只能保存-128 ~ 127的整数, 而加上unsigned可以把符号位都用作为保存数据, 就有8个数据位, 所以能够保存0 ~ 255的整数.
上面说到的类型中, 只有float和double能够保持小数. 其他的都只能保存整数.
下面我们来写个程序来看看C语言的基本数据类型吧:
#include <stdio.h>
int main() {
}
输出如下:
另外基本数据类型的最大和最小值都在<limits.h>这个头文件(头文件以后会说)中, 所以先了解这些类型的最大最小值的话可以看看这个头文件.
(2)
PHP中也有常量, 常量通常说的就是不能改变的量, 如10, 12.50等, 这些量是不能改变的, 所以被称为常量. 本来常量知道这些就足够了, 不过C语言有一些特殊的表示方法, 所以还是要介绍一下的.
如:
[1]以L或者l结尾的整数表示是一个长整型, 像10L, 29l等都表示是一个长整型类型的整数;
[2]以u或者U结尾的整数表示为一个无符号的整数如10u, 29U等都表示是一个无符号的整数;
[3]另外U和L可以一起使用UL表示无符号的长整型类型;
[4]如果想表示小数, 需要有小数点, 像10.25, 表示的是double类型的数如果想要表示float类型的话, 就要加上f或者F作为后缀, 像10.25F;
[5]以0作为前缀的整数表示8进制的数, 如037.
[6]以0x或0X作为前缀的整数表示16进制的数, 如0x37.
[7]还有字符常量, 如'a', 'b', 'c'等等.
注意: 另外要说明一下的是PHP的字符串跟C的字符串不一样, PHP的字符串可以这样表示:
$str = 'Hello World';
或者
$str = "Hello World";
但是C语言只能是这样表示:
char *str;
str = "Hello World";
C语言的字符串是以双引号来包含的, 而C语言的单引号只能表示一个字符, 不能用于字符串的表示, 这点PHP程序员一定要注意.
另外C语言的字符串实际上就是一个字符数组, 这个以后会说到.
(3)
因为PHP是类C语言的, 所以C语言的运算跟PHP的运算相差不大, 如果会PHP的运算的话, 基本上不用看C的运算了. 如果不会的话可以看看PHP的运算那章, 另外要说明一下的是, C语言是没有 “===” 这个运算符的, 这个全等符号是PHP独有的, 所以不能用于C语言.
(4)
PHP中有类型转换, C语言也有类型转换, 而且也挺像的, 如,
PHP代码:
$ivar = "12";
$ivar = (int)$ivar;
虽然C语言也有类似的类型转换, 不过却没有PHP的灵活, 因为PHP可以把字符串转换成数字, 但是C语言不行, C语言的类型转换只能用于基本类型. 如,
C代码:
int ivar = 12;
long lvar = (long)ivar;
但不能这样:
char *svar = "12";
long lvar = (long)svar;
另外精度比较高的数转换成精度比较低的数会出现数据丢失的现象. 如,
#include <stdio.h>
int main() {
}
输出如下:
可以看出cvar已经丢失了16位的数据, 所以我们一般不要把高精度的数转换成低精度的数.
(5)
C语言的流控制跟PHP的基本上一样, 不过C语言多了一个goto语句, 所以我只说goto语句了.
goto语句的作用是跳转到某一处, 如: goto here就会跳转到here这个标记出继续执行代码. 要使用goto语句, 你得先设置一个标记, 设置标记很简单, 使用如下的语句:
here:
goto here;
这样当执行到goto here这里的时候, 就会跳转到here那里继续执行. 所以我们可以使用goto来模拟一个无限循环:
#include <stdio.h>
#include <windows.h>
int main() {
forever:
}
上面的代码是打印Hello World并且睡眠1秒, 然后跳转到forever处继续执行, 这样就可以无限的循环下去.
好了, C语言的基础就说到这里了, 下节要讲的是函数, 敬请留意.