7.2.3 sizeof运算符
初学者常常分不清某个变量是否是指针,尤其在面对定义复杂的指针时更显束手无策。这里向读者介绍一个很有用的运算符--sizeof,它可以帮助识别指针。sizeof也是一个运算符,虽然它的用法看起来很像一个函数。它在编译时计算,返回的是对象的长度,格式如下:
- sizeof object
- 或
- sizeof(object)
例如,sizeof int和sizeof(int)都是在测试整型类型的长度,sizeof var和sizeof(var)都是在测试变量var的长度。由于指针所占的字节数在同一机型上是定长的,比如在32位机上是32位长,因此可以用它来测试某个变量是否是指针。
【示例7-3】 利用sizeof运算来识别指针。
- int main(void)
- {
- char *pChar;
- double *pDouble;
-
- cout<<sizeof(pChar)<<endl;
- cout<<sizeof(*pChar)<<endl;
- cout<<sizeof(pDouble)<<endl;
- cout<<sizeof(*pDouble)<<endl;
- return 0;
- }
分析:该示例的可能输出如下所示。
- 4
- 1
- 4
- 8
分析:该示例中定义两个指针变量。第1条输出语句输出了4,而char型数据的长度为1,故pChar是指针,*pChar是char型数据。第3条输出语句输出了4,而第4个输出了8,表明pDouble是指针,*pDouble是double型数据。
虽然不能完全用sizeof来区分指针和非指针,但它可以作为一个有用的辅助手段来适用。要想学好指针,理解指针的涵义,还需要重点注意下面几个概念。
指针:内存单元的地址,是常量;
指针变量:保存指针的变量,类型依所指向的内存单元的数据而定,常简称为指针;
指针本身的类型:指针本身的类型是无符号整型;
指针的类型:指针所指向的类型,指针所指向的内存单元的数据的类型;
指针的值:指针所指向的内存单元的数据内容;
变量名是直接引用,指针则是间接引用。
说明:*号在指针定义中是指针标识,不在定义中与指针在一起表示指针指向的内存单元。在7.8节会详细讲解它的用法。指针与数组组合时也比较复杂,本书在数组一章中会有详细介绍。
【责任编辑:
云霞 TEL:(010)68476606】