C的温故知新

原创 2006年06月03日 20:34:00
  前几日看了张孝祥老师的C语言测试题,惊诧于自己在语法上的懵懂和经验上的欠缺。昨天再次拾起了《C程序设计语言》,仔细复习了前三章,将自己平时不太注意的地方整理了一下。

1.关于整数之间相除的舍位,商的小数部分将全被舍弃,因此在有整数相除的连续运算中应该注意运算的顺序

int celsius1 ,celsius2,fahrenheit = 100;
celsius1 = 5/9*(fahrenheit-32);//celsius结果是零
celsius2 = 5*(fahrenheit-32)/9;//输出celsius结果是37,相对正确,但不够精确
-------------------------------
float celsius3,fahrenheit2 = 100.0;
celsius3 =5.0/9.0*(fahrenheit-32);//输出celsius结果为37.777779
-------------------------------------------------------------------------
int fahrenheit = 100.5;//输出fahrenheit结果为100
即将float型赋给int型时,小数部分被截取掉。而将double赋给float时,是否四舍五入取决于具体的机器实现。

2.strlen(char* str)函数返回字符串参数str的长度,但不包括其末尾的'/0'。即它根据'/0'判断字符串是否结束。

3.关于枚举
    枚举是一个常量整型值的列表。无显式说明的情况下,第一个枚举常量是0,第二个是1,往后类推。而如果对部分常量值进行了指定,那么对未指定值的枚举名的值将依最後一个指定值向後递增。不通枚举中的名字必须互不相同。同一枚举中的不同名字可以有相同的值。枚举相对于#define定义符号常量的优势就是常量值可以自动生成。

4.continue语句只用在循环语句(for,while,do-while)中,不能用在switch语句中。

5.逻辑非运算符!将把非零操作数转化为0,将操作数0转化为1。

void main(void)
{
       int celsius1 = 9;

       if(celsius1==!!celsius1)
               printf("celsius1 equals !!celsius1/n");
       else
               printf("celsius1 does not equal !!celsius1/n");
}
运行结果
[dog@dog ~]$ ./test.out
celsius1 does not equal !!celsius1

6.关于变量的串联赋值

void main(void)
{
       int i,j,k;
       i=j=k=0;

       printf("i=%d,/tj=%d,/tk=%d/n",i,j,k);
}
运行结果
[dog@dog ~]$ ./test.out
i=0,    j=0,    k=0

课本对此所述如下:在兼有值与赋值两种功能的表达式中,赋值接合次序是由右向左.上面语句就是
i=(j=(k=0));
即把表达式k=0的值赋给了j,这里就引出一点:赋值语句的值是多少?
void main(void)
{
       int i;
       if(i=9)
               printf("Y/n");
       else
               printf("N/n");
}
结果
[dog@dog ~]$ ./test.out
Y


void main(void)
{
       int i;
       if(i=0)
               printf("Y/n");
       else
               printf("N/n");
}
的结果是
[dog@dog ~]$ ./test.out
N
也就是说,赋值表达式的值就是右边表达式的值.

7.关于变量的声明(declaration)和定义(define)

    定义表示创建变量或分配存储单元;而声明只是说明变量性质,并不分配存储单元

extern int a;
void main(void)
{
      printf("a = %d/n", a);
}

the compile process reports error as
[dog@dog ~]$ cc test.c -o test.out
test.c: 在函数 'main' 中:
test.c:28: 错误:stray '/226' in program
test.c:28: 错误:stray '/128' in program
test.c:28: 错误:stray '/156' in program
test.c:28: 错误:syntax error before '%' token
test.c:28: 错误:stray '/' in program
test.c:28: 错误:stray '/226' in program
test.c:28: 错误:stray '/128' in program
test.c:28: 错误:stray '/157' in program

In the program,variable a is only  declared ,but not defined,so the compiler can't find the definition of a.如果没有变量a的定义,那么任何对变量a的操作都是非法的,因为这个变量还不存在。定义时可以给变量赋初值;但声明变量时不能给它赋初值,原因是声明的变量还没有存储空间。

8.“由于函数调用的参数是表达式,所以把参数传递给函数时也可能进行类型转换。在没有函数原型的情况下,char和short类型都将被转换成int类型,float类型将被转换成double类型。因此,及时调用函数的参数是char或float类型,我们也把函数参数声明为int或double类型。”

double d=(double)n
“强制类型转化只是生成一个指定类型的n的值,n本身的值并没有改变”

相关文章推荐

从今天起_温故知新_C基础回顾

1.数据类型—固定内存大小的别名;是一个模具,c语言规定:通过数据类型定义变量。 2.数据类型大小计算(sizeof). 3.可以给已经存在的数据类型起别名 typedef 4.数据类型封装概念(vo...
  • J_link
  • J_link
  • 2017年04月07日 16:08
  • 121

【温故知新C/C++】c++全局变量定义问题||sprintf||rand()

今天在头文件里定义了static boost::asio::io_service G_IO_SERV;做全局变量,同时有几个用到这个全局变量的函数包含了这个头文件,在 程序执行时,这个头文件被包含了几...

[温故知新]Objective-C简单基础

13年开始混迹iOS圈,如今也有快三年了。感觉现在遇到了瓶颈。最近思考了很多,觉得或许重温基础会有很大的好处,所以有了想写博客,重新深入理解、整理所有相关的知识。希望自己可以以此来突破瓶颈期。Swif...

【温故知新C/C++】02:string::size_type ||vector

1.关于string::size_type 在 c++ primer有这么段解释string::size_type类型  从逻辑上来讲,size()成员函数似乎应该返回整型数值,或如2.2节“建议”中...

【温故知新C/C++】cv::Mat||cvCreateImage||cvcopy ||GetTickCount函数||cvFloor||CV_EXPORTS!

cv::Mat在网上看到了cv::Mat和IplImage之间的转换,放在这里以备后用1.IplImage -> cv::Mat這個範例程式裡 image.cpp有啊,做個簡單的範例。Ex.IplIm...

【温故知新C/C++】virtual(多态,覆盖,隐藏)||strtok||strtod||strtol||strrchr||fgets

VC++深入详解:函数的覆盖和隐藏1.函数的覆盖  在上一节介绍多态性的时候,我们给出了下面的代码片段:  例2-19  class animal  {  public:  …  virtual vo...

【温故知新C/C++/opencv】取址符&||cv::groupRectangles||引用与值传递

http://www.nowamagic.net/datastructures/ds_UsageOfAddressOperator.phpC语言中地址操作符&的使用示例一view sourceprin...

【温故知新C/C++】01:C++ ofstream和ifstream||c_str||atoi

1. ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;  在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件...

Spring温故知新六AOP向切面程

  • 2011年05月09日 13:45
  • 54KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C的温故知新
举报原因:
原因补充:

(最多只允许输入30个字)