![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C编程基础
iot_xiaohe
这个作者很懒,什么都没留下…
展开
-
hdu 1222 最大公约数
http://acm.hdu.edu.cn/showproblem.php?pid=1222#includeint gcd(int m,int n) //求m和n的最大公约数{ return n==0?m:gcd(n,m%n);}int main(){ int T,m,n; scanf("%d",&T); while(T--){ scanf("%d%d",&m,原创 2013-04-04 19:19:24 · 926 阅读 · 0 评论 -
函数指针问题,求解答
代码中给函数指针赋值的 语句1、2、3 以及用函数指针调用函数的 语句a、b 运行结果都正确,到底哪个才是正确的呢???#includeint add(int a,int b){ return a+b;}int main(){ int (*p)(int,int); int sum; p = add; //语句1// p = &add; //语句2// p = *a原创 2014-10-09 09:19:13 · 1190 阅读 · 6 评论 -
C语言各种关键字
1、register在函数内定义变量时,默认是 auto 类型,变量存储在内存中,当程序用到该变量时,由控制器发出指令将内存中该变量的值送到运算器,计算结束后再从运算器将数据送到内存。如果一个变量用 register 关键字修饰,编译器则尽可能将该变量存放在CPU的内部寄存器中,这样就不用通过内存寻址来访问变量,可以大大提高访问效率。2、volatilevolatile关键字修饰的变量原创 2014-09-17 10:35:01 · 1168 阅读 · 2 评论 -
C语言内存分配
C语言的内存分配主要有5个区域:1、栈区:在执行函数时,函数内的局部变量(不包括static变量)、函数返回值的存储单元在栈区上创建。函数执行结束时这些存储单元自动被释放。栈区内存分配运算内置于处理器的指令集中,效率很高,但分配的内存容量有限。2、堆区:程序在运行的时候用malloc(calloc、realloc等)申请的内存,要由程序员自己负责用free释放内存。3、静态存储区:存放原创 2014-09-02 19:39:34 · 1039 阅读 · 0 评论 -
位域
#includeunion{ struct{ unsigned char c1:3;//位域操作 unsigned char c2:3; unsigned char c3:2; }s; unsigned char c;}u;int main(){ u.c = 100; printf("%d\n",u.s.c1); printf("%d\n",u.s.c2); pr原创 2014-09-15 08:52:58 · 952 阅读 · 0 评论 -
结构体,联合体,内存分配
#includestruct a{ char x[6]; int y; char z[6];};struct b{ int y; char x[6]; char z[6];};union c{ char x[6]; int y; char z[6];};int main(){ printf("%d,%d,%d\n",sizeof(struct a),sizeof原创 2014-09-01 21:38:29 · 1211 阅读 · 0 评论 -
printf那点事
1、打印内存地址#includeint main(){ int a; printf("%p\n",&a); //%p打印地址,自动加前缀00 printf("0x%x\n",&a); //%x以十六进制打印 return 0;}输出结果:0012FF440x12ff442、printf,sprintf,snprintf原型:int printf原创 2014-09-01 15:18:35 · 824 阅读 · 0 评论 -
指针取值(*)与自增(++)运算
++(*p) 先取指针指向的内容,然后给内容加1,加1操作当前生效。等价于++*p(*p)++ 先取指针指向的内容,然后给内容加1,加1操作在该语句执行后生效*(p++) p指针加1,加1操作在该语句执行后生效,然后取当前p指针指向的内容。等价于*p++*(++p) p指针加1,加1操作当前生效,然后取当前p指针指向的内容。等价于*++p原创 2014-09-01 12:18:16 · 4446 阅读 · 3 评论 -
条件编译
1、ifdef#ifdef XXXXX......#endif如果XXXXX被定义了,则编译上述代码。2、ifndef#ifndef XXXXX......#endif如果XXXXX没有被定义,则编译上述代码。3、if#if XXXXX.....#endif如果XXXXX被定义了,并且值为真,则编译上述代码。4、if define#if define(X原创 2014-09-12 10:03:11 · 1047 阅读 · 0 评论 -
高效统计整数中 1 的比特数
输入一个无符号整数,统计该整数中含1的比特数。#includeint numbits(unsigned int n){ int count = 0; while(n>0){ n &= (n-1);//每次操作去掉n中最低位的1 count++; } return count;}int main(){ unsigned int n; scanf("%d",&n);原创 2014-09-12 10:19:17 · 1829 阅读 · 4 评论 -
指针,指针,指针。。。
1、指针常量与常量指针int a = 10;int * const p1 = &a;const int * p2 = &a;p1是不可改变地址的常量,即指针常量,但可以对它所指向的内容进行修改。p2是指向常量的指针,即常量指针,它所指向的地址内容是不可修改的,但其本身确实可以修改的。2、指针运算#includeint main(){ int *ip1,*ip2原创 2014-09-01 16:05:59 · 2720 阅读 · 2 评论 -
筛选法求素数
原理:大于 1 的任意一个自然数的倍数(大于1)一定不是素数;从2开始升序遍历,找到一个素数就将它的倍数标记为合数,当一个数是合数时它的倍数已经被标记过,可以直接跳过;#include#define SIZE_N 1000int prime[SIZE_N];int main(){ int i,j,temp; for(i=0;i<SIZE_N;i++) prime[i]=1;原创 2013-05-05 13:42:29 · 768 阅读 · 0 评论 -
按位异或运算^
按位异或(xor):A xor B 若A,B相应位相等时结果为0,相应位不等时结果为1规律:一个数与0异或等于自身:0^0=0 1^0=1一个数与1异或等于取反:0^1=1 1^1=0一个数与自身异或等于0:a^a=0运用:交换两个数a和b,不用中间变量a=a^b;b=b^a; //b=b^a=b^(a^b)=a^0=aa=a^b;原创 2013-04-21 20:54:16 · 1163 阅读 · 0 评论 -
hdu 2141 二分搜索
http://acm.hdu.edu.cn/showproblem.php?pid=2141/*在排序后的序列中搜索某个确定的值*/题目大意:在序列a,b,c中分别找一个值,满足a[i]+b[j]+c[k]=X;先将a,b合并为ab,然后用二分搜索在数组ab中查找X-c[k];#include#include#include#include#define Max 505原创 2013-04-21 19:19:41 · 816 阅读 · 0 评论 -
字符串复制
要求:编写一个函数,实现类似strcpy的字符串复制函数。原型定义为 char * mystrcpy(char *dest, char *src)。功能是把src所指向的字符串复制到dest所指的数组中,返回dest指针。(提示:src和dest所指向的区域有可能重叠)。简单版本:char * mystrcpy(char *dest, char *src){ char *p = des原创 2014-09-01 16:59:27 · 898 阅读 · 0 评论