高质量C++编程指南 》学习重点四
2011-05-06 10:29
302 查看
第 |
char a[] = “ hello ” ; a[0] = ‘ X ’ ; cout << a << endl; char *p = “ world ” ; // 注意p 指向常量字符串 p[0] = ‘ X ’ ; // 编译器不能发现该错误 cout << p << endl; |
7-3-1
修改数组和指针的内容
7.3.2
内容
复制与比较
不能对数组名进行直接复制与比较。
示例7-3-2
中,若想把数组a
的内容复制给数组b
, 不能用语句
b = a
,否则将产生编译错误。应该用标准库函数strcpy
进行复制。
同 理,比较b
和a
的内 容是否相同,不能用if(b==a)
来判断,应该用标准库函数strcmp
进行比较。
语句p = a
并不能把a
的 内容复制指针p
,而是把a
的地址赋给了p
。
要想复制a
的 内容,可以先用库函数malloc
为p
申请一块容量为strlen(a)+1
个 字符的内存,再用strcpy
进行字符串复制。同理,语句if(p==a)
比较的不是内容而是地址,应该用库函数strcmp
来比较。
// 数组 … char a[] = "hello"; char b[10]; strcpy(b, a); // 不 能用 b = a; if(strcmp(b, a) == 0) // 不 能用 if (b == a) … |
// 指针 … int len = strlen(a); char *p = (char *)malloc(sizeof(char)*(len+1)); strcpy(p,a); // 不 要用 p = a; if(strcmp(p, a) == 0) // 不 要用 if (p == a) … |
7-3-2
数组和指针的内容复制与比较
7.3.3
计算内存容量
用运算符sizeof
可以计算出数组的容量(字节数)。
示 例7-3-3
(a
)中,sizeof(a)
的值是12
(注 意别忘了
’
/0’
)。指针p
指向a
,但是sizeof(p)
的 值却是4
。
这是因为sizeof(p)
得 到的是一个指针变量的字节数,相当于sizeof(char*)
,而不是p
所指的内存容量。C++/C
语 言没有办法知道指针所指的内存容量,除非在申请内存时记住它。
注意当数组作为函数的参数进 行传递时,该数组自动退化为同类型的指针。
示例7-3-3
(b
) 中,不论数组a
的容量是多少,sizeof(a)
始 终等于sizeof(char *)
。
char a[] = "hello world"; char *p = a; cout<< sizeof(a) << endl; // 12 字节 cout<< sizeof(p) << endl; // 4 字节 |
7-3-3
(
a
)
计算数组和指针的内 存容量
void Func(char a[100]) { cout<< sizeof(a) << endl; // 4 字节而不是100 字节 } |
相关文章推荐
- 《 高质量C++编程指南 》学习重点五
- 《 高质量C++编程指南 》学习重点六
- 《 高质量C++编程指南 》学习重点七
- 《 高质量C++编程指南 》学习重点八
- 《 高质量C++编程指南 》学习重点九
- 《 高质量C++编程指南 》学习重点十
- 《 高质量C++编程指南 》学习重点十一
- 高质量C++编程指南学习笔记1-2章---thanks to林锐
- 高质量C++编程指南学习笔记3-4章---thanks to林锐
- 高质量C++编程指南学习笔记5-6章---thanks to林锐
- 高质量C++编程指南学习小结
- 高质量C++编程指南学习笔记第7章---thanks to林锐
- 高质量C++编程指南学习笔记
- 高质量C++编程指南学习笔记第9章---thanks to林锐
- 高质量C++编程指南学习笔记第8章---thanks to林锐
- 高质量C++编程指南学习笔记第10章---thanks to林锐
- 高质量C++编程指南学习笔记第11章---thanks to林锐
- 学习高质量的c编程指南(程序的板式)
- 学习笔记之高质量C++/C编程指南
- 高质量的c++编程指南