好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C++语法注意点

C++语法注意点

1. 结构Struct和共用体Union

      共用体是一种数据格式,它能够存储不同的数据类型,单只能同时存储其中的一种类型。如结构可以同时存储int、long和double,共用体只能存储int、long或double。

2. 使用cin.get(char)

      使用cin输入,将忽略空格和换行符,而发送给cin的输入被缓冲,这意味着用户必须按下回车才可以把输入的内容发送给程序。

这里可以选择采用cin.get(char)进行补救,最后输入Ctrl+Z执行EOF结束。

3. 二维数组和指针数组

      看这样的两个数组:

char * cities1[5] =

02 {

03 "Fuzhou" ,

04 "Shanghai" ,

05 "Beijing" ,

06 "Xiamen" ,

07 "Quanzhou"

08 };

09 char   cities2[5][10] =

10 {

11 "Fuzhou" ,

12 "Shanghai" ,

13 "Beijing" ,

14 "Xiamen" ,

15 "Quanzhou"

16 };

      因为二维数组的最大长度限制为10个字符,而指针数组存储的是字符串的地址,从存储空间角度说,使用指针数组更为经济;然后修改的话,二维数组是更好的选择。

4. 字符函数库cctype

      在头文件cctype(老式风格中为ctype.h)

5. const int * 和 int * const 的区别

int   sloth = 3;

2 const   int   * ps = &sloth;

3 int   *  const   finger = &sloth;

这种声明格式使得finger只能只想sloth,但允许使用finger来修改sloth的值。中间的声明不允许使用ps来修改sloth的值,但允许将ps指向另一个位置。

6. 函数指针

直接看例子:

double   betsy( int );

02 double   pam( int );

03 void   estimate( int   lines,  double   (*pf)( int ));

04 int   main()

05 {

06 int   code;

07 cout <<  "How many lines of code do you need? " ;

08 cin >> code;

09 cout <<  "Here's Betsy's estimate: \n" ;

10 estimate(code, betsy);

11 cout <<  "Here's Pam's estimate: \n" ;

12 estimate(code, pam);

13 return   0;

14 }

15 double   betsy( int   lns)

16 {

17 return   0.05 * lns;

18 }

19 double   pam( int   lns)

20 {

21 return   0.03 * lns + 0.0004 * lns * lns;

22 }

23 void   estimate( int   lines,  double   (*pf)( int ))

24 {

25 cout << lines <<  " lines will take " ;

26 cout << (*pf)(lines) <<  " hour(s) \n" ;

27 }

 

7.  memset

void *memset(void *s,  int c, size_t n);

memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。

常见的三种错误

第一: 搞反了c 和 n的位置.

一定要记住 如果要把一个char a[20]清零, 一定是 memset(a, 0, 20) 
而不是 memset(a, 20,  0) 

第二: 过度使用memset, 我想这些程序员可能有某种心理阴影, 他们惧怕未经初始化的内存, 所以他们会写出这样的代码:

char   buffer[20];

2 memset (buffer, 0,  sizeof (( char )*20));

3 strcpy (buffer,  "123" );

这里的memset是多余的. 因为这块内存马上就被覆盖了, 清零没有意义. 

第三: 其实这个错误严格来讲不能算用错memset, 但是它经常在使用memset的场合出现

int   some_func( struct   something *a){

2 …

3 …

4 memset (a, 0,  sizeof (a));

5 …

6 }

 

8. 大端格式和小端格式

 大端格式:

在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中
小端格式:

与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。

short   int   x;

2 char   x0,x1;

3 x=0x1122;

4 x0=(( char *)&x)[0];   //低地址单元

5 x1=(( char *)&x)[1];   //高地址单元

若x0=0x11,则是大端; 若x0=0x22,则是小端......

作者: Leepy

 

邮箱:sunleepy(AT)gmail.com

 

出处: http://liping13599168.cnblogs.com/  

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于C++语法注意点的详细内容...

  阅读:47次