- 博客(12)
- 资源 (16)
- 问答 (1)
- 收藏
- 关注
原创 C语言编程不得不养成的好习惯
1:函数参数检查我们一般写一个函数,从来不会对函数的实参进行合法性检查,其实这是很不好的习惯。因为通常我们的函数不会出问题,但是如果参数有问题,这个错误是和不好发现的。对参数的合法性检查可以提高程序的健壮性,如自动有提示,可提高可维护性。2:确保数组越界。我们应该时刻记住这点。如果往里存储一个字符串,别忘了,最后一位是"\0"3:定义变量初始化定义变量后,应该尽快对其初始化
2012-07-27 15:44:50 1894
原创 位域应用——大小端模式对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 2154
原创 #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 912
原创 数值溢出运算
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 2630 1
原创 计算一个整数中含1的比特数
注:代码引用自李亚锋的 《C面试真题精讲》 解析部分为原创。原书中的解析有点不够清晰。描述:编写一个函数,实现功能为:输入一个无符号整数,计算出该整数中含1的比特个数。如给定一个整数8(二进制为1000),它含1的比特数为1。该题目的实现方法可以说是多种多样,如果不考虑效率的话,最简单的方法就是把该整数先转换为2进制,对其每一位进行判断是否为1,然
2012-07-25 20:58:05 3608
原创 一道程序题的反思——一些为了减少内存的开销
已知含有N个元素的一个数组,数组中各元素的范围是1~N-1,找出重复的那个值。(就是有N-1个数都填充到N个位置,这N-1个数至少出现一次,就是说,肯定有哪个数出现了两次,把这个数找出来。这道题,在去年冬天的澡堂里,同学和我讨论过,就是建一个一样大的数组,将原来的数组遍历一遍,相应的位置置1,当再次置1时,返现已经是1时,这就是那个数。但是我一般一定会用int a[N]
2012-07-25 16:54:10 944
原创 C语言malloc()的一个问题——堆越界的一个错误。
malloc函数分配得到的空间是存储在堆区的。系统推出后是不会被释放的,必须由程序员自己用free释放。#include #include #include #include #include int main(){ int address;char *q; char *p=(char *)malloc(sizeof(char)*10);q=strcpy(p,"che
2012-07-24 22:09:51 6568
原创 出现频率最高的笔试题strcpy写法及注意事项
出现频率最高的笔试题strcpy写法题目: 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。解说: 1.strcpy的实现代码 char * strcpy(char * strDest,cons
2012-07-24 21:00:58 1618 4
原创 C语言内存分配及函数返回值的解析。
C语言的内存分配主要如下:(1)栈区:在执行函数时,函数内局部变量(不包含static变量)、函数返回值的存储单元在栈区上创建,函数执行结束时这些存储单元自动被释放。栈区内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(2)堆区:即动态分配内存分配,程序在运行时用malloc(calloc,realloc等)申请的内存,程序员自己负责用free释放内存。(3)
2012-07-23 17:37:44 3289 1
原创 字符与字符串
已知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 1082
原创 如何打印内存地址
请问在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 5098
原创 指针与字符串的秘密&赋值运算返回值&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 1301
\symbian s60 入门详细材料和程序实例
2012-10-12
基于ASP.NET企业销售管理系统论文
2010-05-16
Java程序测试性能发现执行时间随着循环次数会明显降低
2014-08-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人