C面试真题精讲笔记
薄荷微光少年梦
这个作者很懒,什么都没留下…
展开
-
字符与字符串
已知char c=’a‘;char *cp=“a”;请问c和 cp的区别?解析:其中c与cp都是变量而’a‘,“a”都是常量。考察两方面:字符变量与字符指针变量的区别。字符常量与字符串常量的区别。区别如下:(1)c是字符常量,用于代替单个字符。cp是字符指针变量,用于传递字符串。(2)c变量代替的是一个字符常量’a‘;而cp指针变量指向的是字符串常量"a";(3)'原创 2012-07-05 17:32:53 · 1064 阅读 · 0 评论 -
指针与字符串的秘密&赋值运算返回值&printf()返回值
请分析,下述代码的输出结果:#include #include int main(){ char *p1="China"; char *p2,*p3; p2=(char *)malloc(20); memset(p2,0,20); //printf("strlen:%d",strlen(p1)); while(*p2++=*p1++); printf("%s\n"原创 2012-07-05 16:49:04 · 1288 阅读 · 0 评论 -
如何打印内存地址
请问在printf打印函数中一般用什么形式打印变量内存地址:答,最常用的打印地址方式是%p和0x%x。int main(){ int a;// a=4; printf("%p,%X",&a,&a); getch();}答案书上写的是%p打印出的地址自动在地址前加0x前缀,表示以16进制打印,而%x和%X没有这个前缀。地址中的字符大小写随x的大小写但是结果悲剧了:原创 2012-07-05 17:04:15 · 5055 阅读 · 0 评论 -
#define 中 的“##”与“#”
#include #define test(n) printf("test("#n")=%d\n",val##n)#define a #aint main(){int val3=10;int val8=23;test(3);test(8); }在#define中定义了“#”,“##”两种操作。“#”用来把参数转换成字符串,“##”则用来连接前后两个参数,把他们变成一个字符串。原创 2012-07-26 15:24:08 · 894 阅读 · 0 评论 -
数值溢出运算
char chr=127; int sum=100; chr+=1; sum+=chr;chr是char类型,共八位。赋值127。8位为0111 1111。此时若用%d格式打印出来时,规则是,看最左侧为0.为正,绝对值为2^7-1,即127。chr++后,二进制为1000 0000。用%d打印出来为,最左侧为1,为负值。绝对值,要考虑8位。及2^7.即为-128。ch原创 2012-07-25 22:12:56 · 2585 阅读 · 1 评论 -
位域应用——大小端模式对union体的影响的反思。
union{ struct { unsigned char c1:4; unsigned char c2:4; }s; unsigned char c;}u;int main(){u.c=1;printf("%d\n",u.s.c1);return 0;}这道题,感觉非常简单。但是却弄错了,原因是,忽略了大小端模式的影响:重申:原创 2012-07-26 16:03:51 · 2130 阅读 · 0 评论 -
C语言编程不得不养成的好习惯
1:函数参数检查我们一般写一个函数,从来不会对函数的实参进行合法性检查,其实这是很不好的习惯。因为通常我们的函数不会出问题,但是如果参数有问题,这个错误是和不好发现的。对参数的合法性检查可以提高程序的健壮性,如自动有提示,可提高可维护性。2:确保数组越界。我们应该时刻记住这点。如果往里存储一个字符串,别忘了,最后一位是"\0"3:定义变量初始化定义变量后,应该尽快对其初始化原创 2012-07-27 15:44:50 · 1880 阅读 · 0 评论 -
在O(1)时间删除链表一个结点
题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:structListNode{ int m_nKey; ListNode* m_pNext;};函数的声明如下:voidDeleteNode(ListNode*pListHead, ListNode*pToBeDeleted);原创 2013-01-06 13:13:56 · 1218 阅读 · 0 评论