上一页 下一页

C 编程基础

数组详解

变量类型

C 语言中有三种标准变量类型

  • 整型:int
  • 浮点型:float
  • 字符型:char

int 是一个 4 字节的整数值。float 是一个 4 字节的浮点数值。char 是一个 1 字节的单字符(例如“a”或“3”)。字符串被声明为字符数组。

广告

还有许多派生类型

  • double (8 字节浮点数值)
  • short (2 字节整数)
  • unsigned shortunsigned int (正整数,无符号位)

运算符和运算符优先级

C 语言中的运算符与大多数语言中的运算符类似

+ - addition
- - subtraction
/ - division
* - multiplication
% - mod

如果两个操作数都是整数,/ 运算符执行整数除法;否则执行浮点除法。例如

void main()
{
    float a;
    a=10/3;
    printf("%f\n",a);
}

这段代码会打印出一个浮点值,因为 a 被声明为 float 类型,但 a 的值将是 3.0,因为代码执行的是整数除法。

C 语言中的运算符优先级也与大多数其他语言类似。除法和乘法先于加法和减法执行。计算 5+3*4 的结果是 17,而不是 32,因为在 C 语言中 * 运算符的优先级高于 +。您可以使用括号来改变正常的优先级顺序:(5+3)*4 的结果是 32。5+3 首先被计算,因为它在括号中。我们将在后面详细讨论优先级——在 C 语言中,一旦引入指针,优先级会变得有些复杂。

类型转换

C 语言允许您在运行时进行类型转换。使用指针时,您尤其经常这样做。对于某些类型,类型转换也会发生在赋值操作期间。例如,在上面的代码中,整数值自动转换为浮点数。

在 C 语言中,您可以通过将类型名称放在括号中并将其置于要转换的值前面来执行类型转换。因此,在上面的代码中,将行 a=10/3; 替换为 a=(float)10/3; 会产生 3.33333 的结果,因为 10 在除法之前被转换为浮点值。

类型定义

在 C 语言中,您可以使用 typedef 语句声明命名的用户自定义类型。以下示例显示了在 C 代码中经常出现的一种类型

#define TRUE  1
#define FALSE 0
typedef int boolean;

void main()
{
    boolean b;

    b=FALSE;
    blah blah blah
}

这段代码允许您在 C 程序中声明布尔类型。

如果您不喜欢用“float”来表示实数,您可以这样写

typedef float real;

然后可以这样写

real r1,r2,r3;

您可以将 typedef 语句放在 C 程序的任何位置,只要它们在代码中首次使用之前出现即可。

结构体

C 语言中的结构体允许您将变量组合成一个包。这是一个示例

struct rec
{
    int a,b,c;
    float d,e,f;
};

struct rec r;

如这里所示,无论何时您想声明 rec 类型的结构体,您都必须写 struct rec。这行代码很容易忘记,并且因为您心不在焉地遗漏了 struct,您会得到许多编译器错误。您可以将代码压缩为以下形式

struct rec
{
    int a,b,c;
    float d,e,f;
} r;

其中 rec 的类型声明和变量 r 在同一个语句中声明。或者您可以为结构体名称创建一个 typedef 语句。例如,如果您不喜欢每次声明一个记录时都写 struct rec r,您可以这样写

typedef struct rec rec_type;

然后通过以下方式声明 rec_type 类型的记录

rec_type r;

您可以使用点运算符访问结构体的字段,例如,r.a=5;

数组

您可以通过在常规声明后插入数组大小来声明数组,如下所示

int a[10];        /* array of integers */
char s[100];      /* array of characters
                    (a C string) */
float f[20];      /* array of reals */
struct rec r[50]; /* array of records */

递增

Long Way     Short Way
i=i+1;       i++;
i=i-1;       i--;
i=i+3;       i += 3;
i=i*j;       i *= j;