C++快速入门 (七) 再谈指针和函数
2013-01-09 13:51
417 查看
一 特殊的指针
(1). NULL指针
因为C++继承于C, 所以C++也存在 NULL指针,但C++ 中的 NULL指针 等于整数 0 (用宏定义)。#ifdef__cplusplus
#define NULL 0
#else
#define NULL ( (void*)0 )
#endif
(2). void指针
C++ 的 void指针很特殊,通过类型转换可以将任何类型的指针转换为 void指针。虽然 void指针算是万能指针,但也有很多限制。比如 void指针不能进行运算操作,不能解引用操作。(3). 野指针问题
所谓野指针既 指针指向的内存地址已被释放或被其他内容占用,而不是原本想要操作的对象。为了避免野指针应在初始化,特别是运算操作时特别注意。二 函数参数和返回值
(1). 类型转换
C++中 类型转换有多种方式,这里只讨论两种:隐式类型转换 和 显示强制类型转换。使用内置类型时,当某种类型的长度小于要转换的类型,C++有可能会将其“秘密”的进行转换。下例中 int类型隐式转换为 long类型[align=left]int sx = 10000;[/align]
[align=left]long long lx = sx;[/align]
隐式类型转换为我们提供方便的同时也会“隐藏”一些问题。所以大多数情况下建议使用显示类型转换。
显示类型转换顾名思义就是要明确指出待转换类型,
[align=left]int sx = 10000;[/align]
long long lx = ( long long)
sx;
进行类型转换一定要注意 将要转换的类型是否能“容纳”待转换类型。如果容纳不了,C++会 根据将转换类型的长度截断待转换类型。
(2). 函数参数隐式类型转换
如果你将 函数调用填入实参 理解为是用实参初始化形参,就更容易明白 编译器为什么会自动对参数进行隐式类型转换。在调用函数时,尽量用对应类型填入实参不要造成隐式类型转换。[align=left]void TestFun( int x ){}[/align]
.......
[align=left]short x = 10;[/align]
[align=left]TestFun(x);[/align]
(3). 指针类型参数
参数类型为指针时,虽然指针指向的对象被当作引用类型处理,但指针本身是按照值类型处理的,所以可以用一个 “引用指向指针”来传递该指针。[align=left]void Ak ( int *&p ) {...}[/align]
这样在函数体内指针本身也只是一个引用类型。但这种写法真心不多见。因为直接操作指针地址本身就是不安全的。
(4). 多个返回值的函数
一般函数需要有多个返回值时有两种方式:输出参数 或者 将多个返回值打包为一个结构返回。输出参数是非常量的指针或引用, 而无需输出的参数一般需声明为 const ,三 函数的局部变量
(1). 局部变量
在函数中声明的变量只拥有其上层的块作用域(包含它的花括号),使用一般方法创建的变量当出快作用域时,该变量将被释放。[align=left]int _tmain(int argc, _TCHAR* argv[])[/align]
[align=left]{[/align]
[align=left] {[/align]
[align=left] int x = 10;[/align]
[align=left] cout << x << endl;[/align]
[align=left] }[/align]
[align=left] cout << x << endl // error 无法访问变量x[/align]
[align=left]};[/align]
(2). 局部静态变量
使用关键字static 声明变量时,则变量将绑定到该函数并被放到静态存储区,static变量只会被初始化一次,并在该函数所用调用的块作用域中共享。[align=left]void Test()[/align]
[align=left]{[/align]
[align=left] static int ky = 100;[/align]
[align=left] ky += 1;[/align]
[align=left] cout << "test.ky:" << ky << " | " << &ky << endl;[/align]
[align=left]}[/align]
....
[align=left]Test(); // 101[/align]
[align=left]Test(); // 102[/align]
-
<原创文章 转载请注明出处 http://blog.csdn.net/meiwm 谢谢>
作者:meiwm
出处:http://blog.csdn.net/meiwm
本文为原创,本文版权归作者所有。欢迎转载,但请务必保留此段声明,且在文章页面明显位置给出原文连接,谢谢合作。
-
相关文章推荐
- c++快速简易入门教程_004函数的重载
- 《算法笔记》2.7小节——C/C++快速入门->指针
- 挑战30天C++入门极限-C/C++中函数指针的含义(下)
- c++快速简易入门教程_005this指针
- 函数的重载 - C++快速入门06
- C++快速入门 (四) 引用 和 指针
- 函数的重载 - C++快速入门06
- C++快速入门 (六) 函数
- 函数模板 - C++快速入门44
- C++快速入门 (八) 函数运行原理
- 算法笔记》2.6小节——C/C++快速入门->函数
- 《算法笔记》2.7小节——C/C++快速入门->指针
- 函数模板 - C++快速入门44
- 从函数或方法返回内存 - C++快速入门35
- 从函数或方法返回内存 - C++快速入门35
- 《算法笔记》2.7小节——C/C++快速入门->指针
- C++基础入门教程(九):函数指针之回调
- 《算法笔记》2.5小节——C/C++快速入门->函数
- this指针和类的继承 - C++快速入门16
- C++从入门到放弃之 函数指针