C++快速入门 (七) 再谈指针和函数

一 特殊的指针

(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类型

intsx = 10000;

longlonglx = sx;

隐式类型转换为我们提供方便的同时也会“隐藏”一些问题。所以大多数情况下建议使用显示类型转换。

显示类型转换顾名思义就是要明确指出待转换类型,

) sx;

进行类型转换一定要注意 将要转换的类型是否能“容纳”待转换类型。如果容纳不了,C++会 根据将转换类型的长度截断待转换类型。

(2). 函数参数隐式类型转换

x ){}

…….

shortx = 10;

TestFun(x);

(3).指针类型参数

参数类型为指针时,虽然指针指向的对象被当作引用类型处理,但指针本身是按照值类型处理的,所以可以用一个 “引用指向指针”来传递该指针。

voidAk (int*&p) {…}

这样在函数体内指针本身也只是一个引用类型。但这种写法真心不多见。因为直接操作指针地址本身就是不安全的。

(4).多个返回值的函数

一般函数需要有多个返回值时有两种方式:输出参数 或者 将多个返回值打包为一个结构返回。输出参数是非常量的指针或引用, 而无需输出的参数一般需声明为 const ,

三 函数的局部变量

(1).局部变量

argc, _TCHAR* argv[])

{

{

x = 10;

cout << x << endl;

}

cout << x << endl// error 无法访问变量x

};

(2).局部静态变量

使用关键字static 声明变量时,则变量将绑定到该函数并被放到静态存储区,static变量只会被初始化一次,并在该函数所用调用的块作用域中共享。

voidTest()

{

ky = 100;

ky += 1;

cout <<<< ky <<<< &ky << endl;

}

….

Test();// 101

Test();// 102

<原创文章 转载请注明出处 谢谢>

作者:meiwm

出处:

本文为原创,本文版权归作者所有。欢迎转载,但请务必保留此段声明,且在文章页面明显位置给出原文连接,谢谢合作。

华贵的衣服穿在心肠污浊的人身上,显得更丑恶。

C++快速入门 (七) 再谈指针和函数

相关文章:

你感兴趣的文章:

标签云: