c语言复习
2015-08-12 20:47
323 查看
const 和 指针
如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。
const int* p(推荐)
int const* p
第一种可以理解为,p是一个指针,它指向的内容是const int类型。p本身不用初始化它可以指向任何标示符,但它指向的内容是不能被改变的。
第二种很容易被理解成是p是一个指向int的const指针(指针本身不能被修改),但这样理解是错误的,它也是表示的是指向const的指针(指针指向的内容是不能被修改的),它跟第一种表达的是一个意思。为了避免混淆推荐大家用第一种。
再说
const指针,它的意思是指针本身的值是不能被修改的。它只有一种写法
int* const p =一个地址; (因为指针本身的值是不能被修改的所以它必须被初始化)
这种形式可以被理解为,p是一个指针,这个指针是指向int 的const指针。它指向的值是可以被改变的如*p=3;
陷阱一:
记住,typedef是定义了一种类型的新别名,不同于宏,它不是简单的字符串替换。比如:
先定义:
typedef char* PSTR;
然后:
int mystrcmp(const PSTR, const PSTR);
const PSTR实际上相当于const char*吗?不是的,它实际上相当于char* const。
原因在于const给予了整个指针本身以常量性,也就是形成了常量指针char* const。
简单来说,记住当const和typedef一起出现时,typedef不会是简单的字符串替换就行。
陷阱二:
案例一:
通常讲,typedef要比#define要好,特别是在有指针的场合。请看例子:
[code]typedef char *pStr1; #define pStr2 char *; pStr1 s1, s2; pStr2 s3, s4;
在上述的变量定义中,s1、s2、s3都被定义为char *,而s4则定义成了char,不是我们所预期的指针变量,根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型起新名字。
相关文章推荐
- Windows,C++中各种数据类型的转换---很有用!
- vc++6对windows SEH扩展分析 一文拾遗
- Windows,C/C++_字符串转换_MultiByteToWideChar和WideCharToMultiByte的正确使用方法及参数详解
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- Android之——JNI与C语言常见术语
- C语言之——文件操作模式
- c++引用总结
- C语言基础C02数组
- C/C++中的const与define
- 如何求C语言字符串长度(strlen函数和sizeof关键字)
- poj1325最小顶点覆盖
- [转载] C++11中的右值引用
- C++ 预处理、const与sizeof 知识点 小结
- Java和C++的主要区别以及Java垃圾回收机制
- C++笔试总结-面试笔试常考题型(二)
- C++怎样跳出双层for循环
- 【C语言经典实例】-使用指针查找数列中的最值
- C++ 控制台版 2048小游戏
- C++ explicit关键字 详解(用于构造函数)
- C与C++区别之处