面试 (.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机面试题汇总 - C 语言(2) 文章来源: ?? 作者:sonew 发布时间:2008-12-26 18:52:14 ?? 阅读次数:928 次 本文标签(Tag) HYPERLINK /tag.php?ts=计算机面试题 \t _blank 计算机面试题 HYPERLINK /tag.php?ts=C \t _blank C * 用宏定义写出 swap(x,y) #define swap(x, y)\ x = x + y;\ y = x - y;\ x = x - y; ? * 2.数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型: ?int do_dup(int a[],int N) ? * 一语句实现x是否为2的若干次幂的判断 ? int i = 512; ? cout boolalpha ((i (i - 1)) ? false : true) endl; ? * unsigned int intvert(unsigned int x,int p,int n)实现对x的进行转换,p为起始转化位,n为需要转换的长度,假设起始点在右边。如 x=0b0001 0001, p=4, n=3 转换后 x=0b0110 0001 unsigned int intvert(unsigned int x,int p,int n) { ? unsigned int _t = 0; ? unsigned int _a = 1; ? for(int i = 0; i n; ++i) { ??? _t |= _a; ??? _a = _a 1; ? } ? _t = _t p; ? x ^= _t; ? return x; } ? * char * const p; ? char const * p ? const char *p ? 上述三个有什么区别? char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const *p ? * main() { ? int a[5]={1,2,3,4,5}; ?? int *ptr=(int *)(a+1); ?? printf(%d,%d,*(a+1),*(ptr-1)); } 输出:2,5 *(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5 a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int) int *ptr=(int *)(a+1); 则ptr实际是(a[5]),也就是a+5 原因如下: a是数组指针,其类型为 int (*)[5]; 而指针加1要根据指针类型加上一定的值, 不同类型的指针+1之后增加的大小不同 a是长度为5的int数组指针,所以要加 5*sizeof(int) 所以ptr实际是a[5] 但是prt与(a+1)类型是不一样的(这点很重要) 所以prt-1只会减去sizeof(int*) a,a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],a+1是下一个对象的地址,即a[5]. ? * 请问以下代码有什么问题: int main() { ? char a; ? char *str=a; ? strcpy(str,hello); ? printf(str); ? return 0; } 没有为str分配内存空间,将会发生异常 问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。 ? char* s=AAA; printf(%s,s); s[0]=B; printf(%s,s); 有什么错? AAA是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。 cosnt char* s=AAA; 然后又因为是常量,所以对是s[0]的赋值操作是不合法的。 ? * 写一个“标准”宏,这个宏输入两个参数并返回较小的一个。 ? #define Min(X, Y) ((X)(Y)?(Y):(X)) ? * 嵌入式系统中经常要用到无限循环,你怎么用C编写死循环。 ? while(1){}或者for(;;) ? * 关键字static的作用是什么? ? 定义静态变量 ? * 关键字const有什么含意? ? 表示常量不可以修改的变量。 ? * 关键字volatile有什么含意?并举出三个不同的例子? ? 提示编译器对象的值可能在编译器未监测到的情况下改变。

文档评论(0)

mv2323 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档