龙空技术网

经典C语言面试题-1

额度Y 126

前言:

如今咱们对“c语言y1为什么”大概比较讲究,各位老铁们都需要学习一些“c语言y1为什么”的相关文章。那么小编同时在网络上网罗了一些有关“c语言y1为什么””的相关知识,希望同学们能喜欢,看官们快快来了解一下吧!

如果您对以下这几点不够了解和熟悉的,请您尽快查阅资料补习奥,对您大有帮助的,后续会继续更新其他经典和实用的面试题?全是干活。

1、用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)

#define SECONDS_PER_YEAR (60*60*24*365)UL

重点:UL 用法

2、函数m_func 求 m_func(1024)= 、m_func(0x1234)= 的值?

uint8_t m_func(uint32_t v){	static uint8_t result = 0;	result = 0;	int i;	for(i = 0; i < 255; i++)	{		if(1 ==(v %2))			result++;		v/=2;	}	return result;}

3、如上m_func()函数,进行优化

解析:如上m_func函数最少要执行255次,如果您仔细分析发现主要是求这个数的二进数有几个1?

方法1:左移或者右移方法判断方法,函数形参是一个int型4字节(32bit)的类型所以只需要执行32次

方法2:目前是最优解法

uint8_t m_function(uint32_t v){		int value = 0;		while(v){			v =v&(v-1);			value++;		}		return value;}

其他方法:效率 log2(n) 等等,大家可以上网进行搜索其他方法

4、叙述函数指针和指针函数的区别和用法?指针函数

指针函数,简单地来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。

声明格式为:*类型标识符 函数名(参数表)

int *fun(int x,int y);

函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。

声明格式:类型说明符 (*函数名) (参数)

int (*fun)(int x,int y);

5、指针数组和数组指针的区别?

数组指针(也称行指针)

定义 int (*p)[n];

()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。

指针数组

定义 int *p[n];

[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n 个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的 :p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。

这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。

还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。

6、结构体字节对齐

struct STUDENT{    char a;    int b;}data1;struct STUDENT{    int b;    char a;}data1;

如上结构体变量 data1、data2 占多少字节?如果我们不加思考的可能会回答占5个字节,事实会是如此嘛?我们写程序验证下两个结构体的占多少字节的结果?

7、TCP与UDP用法与区别?TCP 、UDP有广播的形式么?

标签: #c语言y1为什么