Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1757188
  • 博文数量: 600
  • 博客积分: 10581
  • 博客等级: 上将
  • 技术积分: 6205
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 10:13
文章分类
文章存档

2016年(2)

2015年(9)

2014年(8)

2013年(5)

2012年(8)

2011年(36)

2010年(34)

2009年(451)

2008年(47)

分类: C/C++

2009-08-26 11:07:51

命名规则及运算符

C语言源程序由一系列的单语句、复合语句、预处理语句和注释语句组成。复合语句由若干条简单语句组成,并用花括号括起来。每一条简单语句后均由单词及运算符组成,并以“;”结束。

单词是指由字母、数字及下划线组成的字符串,单词必须以字母或者下划线开始。

C语言的运算符具由优先级和结合性。优先级指运算时哪一个运算符会被优先计算。结合性是指对相同优先级的运算符,左边或者右边的子表达式将被优先计算。C语言运算符的优先级与结合性见表3-1所示。

3-1   C语言运算符的优先级与结合性

            

结 合 性

()     []    ->     .

从左至右

++  --  +   -  !  ~ (类型)  *  & sizeof

从右至左

*   /   %

从左至右

+    -

从左至右

<<    >>

从左至右

<<=     >>=

从左至右

==     !=

从左至右

&

从左至右

^

从左至右

|

从左至右

&&

从左至右

||

从左至右

?:

从右至左

=  +=  -=  *=  /=  %=  &=  ^=  !=  <<=

>>=

从右至左

,

从左至右

注:运算符从上至下按优先级降序排列

流程控制

3.2.1 选择及分支

if (condition) { for-true} else {for-false}:如果condition为真(非0),则执行语句for-true,否则执行语句for-false。例如,如果姓名及密码合法,则显示欢迎,否则显示不欢迎:

if ( strcmp (user, guest) == 0 && strcmp (password, guest) == 0)

{

  printf (hello: %s\n, user);

}

else

{

  printf (Stop! You are not trusty!\n);

  exit (1);

}

switch (expression) {case (value): break; }switch语句提供多重选择,expression为整型变量,value为整型常量(字符型可看作整型)。程序进入到与expression匹配的分支,并运行到整个switch语句的末尾或者第一个break语句处。

3.2.2 循环

while (condition) { ...}:若condition为真,则执行循环体内的语句,否则结束循环。

do {...} while (condition):执行循环体内的语句,并根据condition的真假决定继续循环或者结束循环。

for ( init; condition; calculation) { }:首先执行init表达式,然后判断condition,若其为假,则不结束循环。若condition为真,则执行循环体,然后做计算calculation。计算之后再判断condition的真假,并决定继续循环或者结束循环。

continue:结束本次循环,并继续下一次循环。对for循环,将先做计算calculation

break:结束整个循环体。结for循环,将不再计算calculation

3.2.3 跳转

goto label:无条件跳转到label指定的标号处。该语句的大量使用将会严重破坏程序的结构,建议尽量少用。

return:从函数体返回。

exit:退出当前进程。

函数

函数是实现结构化程序设计的有力工具。函数的普遍形式为:

type foo (type arg1, type arg2, )

其中:type指出函数返回值或者参数的类型

有的系统要求函数使用前必须定义,可以在使用某函数前申明该函数的原型。更普遍的做法是统一将程序中用到的函数原形申明在头文件中,每一个程序均包含该头文件。

C语言的函数参数通常是传值的。如下列函数调用:

void fun(int x, int y)

{

x++, y++;

printf(IN fun(): x[%d], y[%d]\n, x, y);

}

void caller()

{

int     x = 5, y = 7;

printf(IN caller(1): x[%d], y[%d]\n, x, y);

fun(x, y);

printf(IN caller(2): x[%d], y[%d]\n, x, y);

}

为了在被调用函数中改变传入参数的值,必须以地址作为参数,例如:

void fun(int *x, int *y)

{

*x++, *y++;

printf(IN fun(): x[%d], y[%d]\n, *x, *y);

}

void caller()

{

int     x = 5, y = 7;

printf(IN caller(1): x[%d], y[%d]\n, x, y);

fun(&x, &y);

printf(IN caller(2): x[%d], y[%d]\n, x, y);

}

同样,如果传入的参数本身就是指针型变量,为了改变该指针指向的地址,必须传入二级指针。例如:

void fun(int **x)

{

*x = malloc(sizeof(int));   /* allocate memory */

**x = 5;         /* set value */

printf(IN fun(): x[%d]\n, **x);

}

void caller()

{

int     *x = NULL;

fun(&x);

printf(IN caller(2): x[%d]\n, *x);

free(x);                 /* free memory */

}
阅读(454) | 评论(0) | 转发(0) |
0

上一篇:vi 的基础使用方法

下一篇:数据库基础

给主人留下些什么吧!~~