前言:
如今咱们对“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为什么