您的位置:首页 > 编程语言 > C语言/C++

PHP程序员的C学习之路2 - 第一章, C语言的一些基础

2014-03-25 14:49 453 查看
                                第一章, 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语言有两个专门来描述正负的关键字unsignedsignedunsigned表示数字是没符号的(就是正数). signed表示有符号(可正可负), 而不加unsigned的都默认为有符号的. 所以上面所说的类型都是有符号的, 因为符号需要用一个位来表示, 所以8位大小的数据只能使用7位来保存数据, 一个位表示符号了. 也就是说char只能保存-128
~ 127的整数, 而加上unsigned可以把符号位都用作为保存数据, 就有8个数据位, 所以能够保存0
~ 255的整数.

上面说到的类型中, 只有float和double能够保持小数. 其他的都只能保存整数.

 

下面我们来写个程序来看看C语言的基本数据类型吧:

#include
<stdio.h>

 

int main()
{

    int ivar;

    float fvar;

    long lvar;

 

    ivar =
10;

    fvar =
10.00;

    lvar =
10;

 

    printf("ivar: %d, fvar: %f, lvar: %ld\n", ivar, fvar, lvar);

    return 0;

}

 

输出如下:



 

另外基本数据类型的最大和最小值都在<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)  C语言的运算

因为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()
{

    unsigned
long lvar = 0x7FFFFFFF;

    unsigned
short cvar = (unsigned short)lvar;

 

    printf("lvar: %x, cvar: %x\n", lvar, cvar);

    return 0;

}

 

输出如下:



可以看出cvar已经丢失了16位的数据, 所以我们一般不要把高精度的数转换成低精度的数.

 

 

(5)  C语言的流控制

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:

    printf("Hello World\n");

    Sleep(1000);

    goto forever;

    return 0;

}

 

上面的代码是打印Hello World并且睡眠1秒, 然后跳转到forever处继续执行, 这样就可以无限的循环下去.

 

好了, C语言的基础就说到这里了, 下节要讲的是函数, 敬请留意.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 php 编程