前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础知识 | 每日一面(2)

基础知识 | 每日一面(2)

作者头像
小林C语言
发布2019-12-18 16:49:54
4550
发布2019-12-18 16:49:54
举报
古代的剑客们与

对手相逢时,无

论对手多么强大,

明知不敌,也要亮出自己的剑!

读者:有一个16位的整数,每4位为一个数,写函数求他们的和。

小林解释:

整数1101010110110111 和 1101+0101+1011+0111 感觉应该不难。

疑问:既然是16位的整数,1101010110110111是2进制的,那么函数参数怎么定义呢?

答案:用十进制做参数,计算时按二进制考虑。

/* n就是16位的数,函数返回它的四个部分之和 */

char SumOfQuaters(unsigned short n) 
{ 
    char c = 0; 
    int i = 4; 
    do 
    { 
        c += n & 15; 
        n = n >> 4; 
    } while (--i);
    return c; 
}
读者:分析下面的代码:
char *a = "hello"; 
char *b = "hello"; 
if(a==b) 
    printf("YES"); 
else 
    printf("NO"); 

小林:

这个简单的面试题目,我选输出 no(对比的应该是指针地址吧),可在VC是YES 在C是NO lz的呢,是一个常量字符串。位于静态存储区,它在程序生命期内恒定不变。如果编译器 优化的话,会有可能a和b同时指向同一个hello的。则地址相同。如果编译器没有优化,那么就是两个不同的地址。

有时候,正是那些意想不到之人,成就了无人能成之事。——图灵

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档