预处理、const与sizeof

############程序员面试宝典##########

1 预处理指令#define声明一个常数,用以表明1年中有多少秒

#define SECOND_PER_YEAR (60*60*24*365UL)
 #define 语法的基本知识(不能以分号结束)

预处理将会计算常数表达式的值,写出如何计算一年中有多少秒而不是计算出实际的值更有意义

有可能将一个16位机整形数溢出,因此要用到长整形符号L,告诉编译器这个常数是长整形数。

2 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个

#define MIN(A,B) ((A)<=(B)?(A):(B)) 

在C程序中,const的用法主要有定义常量、修饰函数参数、修饰函数返回值。在C++程序中,它还可以修饰函数的定义体,定义类中某个函数为恒态函数。

3关于sizeof

struct{
	short a1;
	short a2;
	short a3;
}A;
struct{
	long a1;
	short a2;
}B;


int main()
{
	char *ss1="0123456789"; cout<<sizeof(ss1)<<endl; //指针大小为4
	char ss2[]="0123456789"; cout<<sizeof(ss2)<<endl; //数组大小为10+1
	char ss3[100]="0123456789";cout<<sizeof(ss3)<<endl;//数组的大小为100字节
	int ss4[100];cout<<sizeof(ss4)<<endl;//数组的大小为400字节
	char q1[]="abc";cout<<sizeof(q1)<<endl;//数组的大小为4字节
	char q2[]="a\n";cout<<sizeof(q2)<<endl; //\n为一个字节 总共3个字节
	char *q3="a\n";cout<<sizeof(q3)<<endl;//指针大小为4
	char *str1=(char*)malloc(100);cout<<sizeof(str1)<<endl;//指针大小为4
	void *str2=(void*)malloc(100);cout<<sizeof(str2)<<endl;//指针大小为4
	cout<<sizeof(A)<<endl;//A中最大的长度为2字节 用2字节对齐,总共为6字节
	cout<<sizeof(B)<<endl;//B中最大的长度为4字节 用4字节对齐,总共为8字节
	return 0;
}
4 关于sizeof

class A1
{
public:
	int a;
	static int b;
	A1();
	~A1();
};
class A2
{
public:
	int a;
	char c;
	A2();
	~A2();
};

class A3
{
public:
	float a;
	char c;
	A3();
	~A3();
};

class A4
{
public:
	float a;
	int b;
	char c;
	A4();
	~A4();
};

class A5
{
public:
	double d;
	float a;
	int b;
	char c;
	A5();
	~A5();
};
int main()
{
	cout<<sizeof(A1)<<endl; //静态变量放在全局数据区,而sizeof计算栈中分配的大小 所以大小为4字节
	cout<<sizeof(A2)<<endl;//为了照顾对齐,用int的四字节对齐,sizeof为8字节
	cout<<sizeof(A3)<<endl;//float为四个字节  A3为8字节
	cout<<sizeof(A4)<<endl;//float为四个字节  A3为12字节
	cout<<sizeof(A5)<<endl;//double为八个字节  A3为24字节
	return 0;
}
5 sizeof和strlen

sizeof可以用类型做参数,strlen只能是char* 且必须以\0结尾。数组做sizeof的参数不退化,传递给strlen就退化为指针。大部分编译程序在编译时就把sizeof计算过了,strlen的值在运行的时候才能计算。

7 sizeof

int test(char var[])
{
	return sizeof(var);
}
int main()
{
	char var[10];
	cout<<sizeof(var)<<endl; //输出数组的大小10
	cout<<test(var)<<endl;//var[] 退化为指针输出的大小4
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值