由于工作需要转成了C#,好久没有学C++了,之前学了一段时间的C++,也写过两篇,放在博客园里的,现在有专门的C++博客,以后就在这里写了。以下是前两篇的地址
C++之父力作学习笔记1 C++之父力作学习笔记
今天来简单说一下指针,可以说指针是一个难点,是一把双刃剑,也许高手才能运用自如,像我这样的菜鸟就会伤到自己。呵呵,废话少说。
指针:对类型T,T*是“到T的指针”,也就是说,一个类型为T*的变量能保存一个类型T的对象的地址。例如:
char c='a';
char *p=&c;//p保存着c的地址 用图表示是:
这些都挺容易理解的,不幸的是,到数组的指针和到函数的指针需要更复杂的记法:
int* pi; //到int的指针
char** ppc; //到字符的指针的指针
int* ap[10]; //10个到int的指针的数组
int (*fp)(char*); //到函数的指针,这种函数以char*为参数,返回int
int* f(char*); //有一个char*参数的函数,返回一个到ini的指针 对指针的基本操作是间接引用,也就是说引用被指针所指的那个对象。这一操作也被称作间接(indirectionn)。间接运算符是(前缀的)一元*。例如
char c='a';
char* p=&c; //p保存着c的地址
char c2=*p; //c2=='a' 被p所指的变量是c,而c中所存的值是'a'。所以由*p赋给c2的值就是'a'.
注意:这里解释一下 间接运算符是(前缀的)一元*。这就要扯到声明的结构了。
一个声明由四个部分组成:一个可选的“描述符”,一个基础类型,一个声明符,还有一个可选的初始式。除了函数和名字空间之外,其他声明都应该由分号结束。例如:
char* kings[]={"Antigonus","Seleucus","Ptolemy"}; 这里的基础类型是char,声明符是*kings[],而初始化是={...}。
描述符是一个开始关键字,例如:virtual和extern,它们说明了被声明事物的某些非类型的属性。
声明符由一个名字和可选的若干声明运算符组成。最常用的声明运算符是
* 指针 前缀
*const 常量指针 前缀
& 引用 前缀
[] 数组 后缀
() 函数 后缀