您的位置:首页 > 编程语言 > C语言/C++

C/C++中的sizeof相关【面试?】

2014-09-12 19:29 281 查看
数组和指针的细微区别

#include <iostream>
using namespace std;

//sizeof的指针运算值相关
int GetSize(int data[]){
	return sizeof(data);
}
int main() {

	int list[] = {1,3,36,56,76,34,61,76,12,4};//  array of 10 elements
	int list_size = sizeof(list);

	int *list2 = list;
	int size2 = sizeof(list2);

	int size3 = GetSize(list);

	cout<<list_size<<endl;
	cout<<size2<<endl
			<<size3;

	return 0;
}
/**
 * 分析:
 * list_size是一个数组,sizeof(list_size)是求数组的大小,这个数组包含10个整数,每个整数占4个字节,因此是40个字节。
 * size2声明为指针,尽管它指向list,但是它的本质还是一个指针,在32位系统中对任意指针求sizeof,得到的结果都是4.
 * size3。在C/C++中当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针,size3的结果仍为4
 */

输出结果:

40

4

4

字符串相关:(完美笔试)

#include <iostream>
using namespace std;
//字符串相关的sizeof
void func(char p[10])
{
	printf("%d\n",sizeof(p));        // 4
}

void func(char (&p)[10])
{
	printf("%d\n",sizeof(p));        // 10
}

int main(void)
{
	char array[] = "abcdefg";
	printf("%d\n",sizeof(array));        // 8

	char *p = "abcdefg";
	printf("%d\n",sizeof(p));            // 4

	printf("%d\n",sizeof(char[2]));     // 2
	printf("%d\n",sizeof(char&));       // 1
	return 0;
}
输出:

8

4

2

1

函数:

#include <iostream>
using namespace std;

class CBase{
public:
	void func(){
		Print();
	}
	virtual void Print(){
		cout<<"CBase::Print"<<endl;
	}
};

class CDerived:public CBase{
public:
	virtual void Print(){
		cout<<"CDerived::Print"<<endl;
	}
};

int main(void)
{
	CDerived c;
	CBase *p = &c;
	cout<<sizeof(*p)<<endl;  //  4
	cout<<sizeof(p)<<endl;   //  4  sizeof(指针) == 4
	cout<<sizeof(c)<<endl;   //  4
	return 0;
}



浅谈C++结构体和类,对象的大小该如何计算?

参考文章地址: http://www.youranshare.com/blog/sid/90.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: