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; |
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,则是小端......