C语言常用面试题 第二阶段

**

1.请定义一个宏,比较两个数的大小,不能使用大于、小于、if语句。

**

#define MAX(A,B)	(((A)-(B)) >> 31 ? (B) : (A))		//注意三目运算符的原理。

说明:利用变量为负数时最高位为负数的原理,实现了MAX宏。
注意:不支持浮点型。
例如:

	unsigned char a,y;
	x = 89;
	y = 56;1printf("val = %d\n",(y-x) >> 31);			//结果为:-1	 : MAX(Y,X)2printf("val = %d\n",((y-x) >> 31 ? x : y);	//结果为:x	 :(1)值为0,则(2)结果为y; (1)值为-1,则(2)结果为x。

2.在c++中,如何输出源文件的标题和目前执行行的行数

#include <iostream>

using namespace std;	//定义空间

int main(void)
{
	int line = __LINE__;			//行号
	char *file = __FILE__;			//绝对路劲
	cout <<"file name is "<< (file) <<",line is "<< line <<endl;
	return 0;
}

3.请说出const与#define 相比,有何优点?

	首先说说const的作用:
	将变量定义成只读属性,修饰函数参数,修饰函数返回值 三个作用。
	一:只读属性:被const修饰的变量受到强制保护。
	二:修饰函数参数:防止被函数意外的变动。
	三:修饰函数参数,修饰函数返回值:提高程序的健壮性
	比较:
	(1)const 变量是由数据类型,而宏常量是没有数据类型的;所以编译器可以对前者进行类型安全检查,而后者只进行字符替换,没有类型安全检查,所以可能会产生意料不到的错误。
	(2)有些集成化的调式工具可以对const变量进行调试,但是不能对宏常量进行调试。

4.简述数组与指针的区别?

答:数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。
(1)修改内容的差异
char a[] = “hello”;
a[0] = ‘X’;
char *p = “world”; // 注意p 指向常量字符串
p[0] = ‘X’; // 编译器不能发现该错误,运行时错误

(2)用运算符sizeof 可以计算出数组的容量(字节数)。
	sizeof(p),p 为指针得到的是一个 指针变量的字节数,而不是p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针
		     char a[] = "hello world";
		     char *p = a;
		     cout<< sizeof(a) << endl; // 12 字节
		     cout<< sizeof(p) << endl; // 4 字节
	     计算数组和指针的内存容量
		     void Func(char a[100])
		     {
		      		cout<< sizeof(a) << endl; // 4 字节而不是100 字节
		     }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值