代码:
#include <iostream>
using namespace std;
int swap( int &a , int &b );
int main( int argc , char *argv[] )
{
cout<<"Welcome sizeof test program"<<endl;
int i=0;
int &ir=i;
char c=0;
char &cr=c;
int *ip1=NULL;
int *&ipr1=ip1;
char *cp1=NULL;
char *&cpr1=cp1;
int *ip2=(int *) malloc(100*sizeof(int));
int *&ipr2=ip2;
char a[]="Hello World";
char *ap=a;
cout<<"sizeof(int i=0;)-整型:"<<sizeof(i)<<endl;
cout<<"sizeof(int &ir=i;)-整型引用:"<<sizeof(ir)<<endl;
cout<<"sizeof(char c=0;)-字符:"<<sizeof(c)<<endl;
cout<<"sizeof(char &rc=c;)-字符引用:"<<sizeof(cr)<<endl;
cout<<"sizeof(int *ip1=NULL;)-整型指针:"<<sizeof(ip1)<<endl;
cout<<"sizeof(int *&ipr1=ip1;)-整型指针的引用:"<<sizeof(ipr1)<<endl;
cout<<"sizeof(char *cp1=NULL;)-字符指针:"<<sizeof(cp1)<<endl;
cout<<"sizeof(char *&cpr1=cp1;)-字符指针的引用:"<<sizeof(cpr1)<<endl;
cout<<"sizeof(……)-指向400字节的整型内存空间的指针:"<<sizeof(ip2)<<endl;
cout<<"sizeof(int *&ipr2=ip2;)-指向400字节的整型内存空间的指针的引用:"<<sizeof(ipr2)<<endl;
cout<<"sizeof(char a[]='Hello World';):"<<sizeof(a)<<endl;
cout<<"sizeof(char *ap=a;):"<<sizeof(ap)<<endl;
cout<<"Welcome sizeof test program"<<endl;
return 1 ;
}
运行结果:
注意:
- 用运算符 sizeof 可以计算出数组的容量(字节数) 。如上示例中,sizeof(a)的值是 12(注意别忘了’ ’ ) 。指针 ap 指向 a,但是 sizeof(ap)的值却是 4。这是因为 sizeof(ap)得到的是一个指针变量的字节数,相当于sizeof(char*),而不是 p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。
- 当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。如下示例中,不论数组 a 的容量是多少,sizeof(a)始终等于 sizeof(char *)。
void Func(char a[100])
{
cout<< sizeof(a) << endl; // 4 字节而不是 100 字节
}