![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C之进阶中
NowDoIT
这个作者很懒,什么都没留下…
展开
-
字符串处理函数设计的几个基本原则
<br />字符串处理函数设计的几个基本原则<br /><br />1.最好是设计成字符指针来进行操作<br />如,char *ch;<br /><br />2.判断内容,很多情况下判断第一个字符即可<br />如,if( *ch>=0 && *ch=<9); 判断是否为数字;<br />if( *ch >='a' && *ch <= 'z'); 判断是否为小写字母;<br /><br />3.判断是否已经结束?<br />如,if( ch == 0 ); 也等同于 if( ch == NULL);<br原创 2010-12-11 11:42:00 · 400 阅读 · 0 评论 -
排序算法的C语言实现
要实现这几种算法的关键是要熟悉算法的思想。简单的说,冒泡排序,就如名字说的,每经过一轮排序,将最大的数沉到最底部。选择排序的思想是将整个数列,分为有序区和无序区。每轮排序,将无序区里的最小数移入到有序区。快速排序的思想是以一个数为中心,通常这个数是该数列第一个数,将整个数列分为两个部分,一个部分是大于这个数的区域,一个部分是小于这个数的区域。然后再对这两个部分的数列分别排序。如果将数列分为两个部分转载 2012-01-30 16:39:46 · 405 阅读 · 0 评论 -
C語言函數access的應用
access()是C語言中驗證文件的一個函數,具體的函數原型,大家可以百度之,現在舉一個應用的例子。#include #include #include int main(int argc,char* argv[]){ char str[1024];原创 2011-08-05 16:47:43 · 368 阅读 · 0 评论 -
函数指针的学习和应用
1.函数指针,顾名思义是指向一个函数的。如下原创 2011-03-15 10:18:00 · 325 阅读 · 0 评论 -
C语言里面常用的时间日期函数总结
时间类型定义: 头文件:time.h 定义为:time_t 某些系统定义为 typedef long time_t获取时间函数: time() 接收time_t指针类型,将当前时间存储在入参 example: time_t time_now; time(&time_now);输出时间函数: ctime() 接收time_t的指针,转换为字符串输出 ex原创 2011-01-26 12:26:00 · 861 阅读 · 0 评论 -
如何在cmd窗口下改变前景背景的颜色?
可以在cmd运行窗口输入 color help? 来查看帮助!系统调用如下:#include #include int main(int argc,char *argv[]){ char s[] = "I am a Good Boy!!!"; system("color 2F"); //有两个16进制数组成,第一个为背景,第二个为前景! printf("%s/n",s); getch(); return 0;}原创 2011-01-24 09:05:00 · 797 阅读 · 0 评论 -
关于函数指针的使用
先看一段代码:#include #include typedef void (*print_leder)(int); //声明函数指针数组void print_leder_long(int a){ printf("your intput is long!!!/n");}void print_leder_detailed(int a){ printf("your intput is detailed!!!/n");}void print_leder原创 2011-01-24 08:14:00 · 332 阅读 · 0 评论 -
如何将long型数据的4个字节存储在字符数组中?
/*前提*/ long a = 0x12345678; char s[5] = {0};/*方法一*//*原理: 取a的地址,强制转化为char*,(指针占一个字节,正好四个字节),然后解引用取值并赋给s[i];*/ for(int i = 0;i原创 2011-01-24 17:50:00 · 2083 阅读 · 0 评论 -
C语言的设计原则
任何事物都不是凭空产生的,也不是一步就优化到位的!C语言也不例外,从一些C语言应用上面来看,有下面几个原则:1.空间占用越小越好 C语言函数的传参方式是拷贝一份参数,供程序主体使用; 因此,传递结构体就不如传递结构体指针;包括对联合的设计,也是出于尽可能小的占用空间; 还有就是内存对齐以及位域. 举个例子,看看位域的情况:strcut CHAR { unsigned ch : 7; unsigned font : 6; unsigned size : 19;}原创 2011-01-17 12:41:00 · 955 阅读 · 0 评论 -
函数fp()、数组a[i]和箭头符号->的由来
很多事物的由来都是有理由的,现在看似晦涩难解的符号token,背后都是有一段历史!1. fp()只是一种简写方式fp()是一个函数指针,所以*fp就是该指针指向的函数,所以(*fp)()就是调用该函数的方式。也就是 (*fp)() 和 fp() 是同一个意思;ANSI C 标准规定允许程序员将上式简写成 fp(),但是要记住,这只是一种简写方式罢了!这样的话,在查看定义比较复杂的函数时候,就能容易理解了!比如(*(void(*)()0)()。2. 数组a[i]的由来.首先我们定义一个数组,a[i];然后定义原创 2011-01-16 21:55:00 · 2883 阅读 · 0 评论 -
如何判断一个整数n转换成二进制后,有几个1?
代码实现:#include #include int count_sum(int n){ int count = 0; int i = 0; for(i = 0;i >=1; } return count;}测试一下:int main(){ int a = 100; printf("%d/n",count_sum(a));}测试结果: 3说明是正确的.原创 2011-01-14 17:15:00 · 984 阅读 · 0 评论 -
不完美的C --从《C陷阱和缺陷》说起 [外部类型检查,库函数,标识符名称]
1.外部类型的检查并不完美;/*源文件a.c*/extern int n; //指明n是引用外部变量/*源文件b.c*/long n; //指明的n的定义在这种情况下,C语言是不能检测出这种错误的!原创 2011-01-14 10:43:00 · 1311 阅读 · 0 评论 -
不完美的C语言,从字符数组说起
先看两个小程序/*Test A*/#include #include int main(){ char str[5] = "abc"; //常量进行初始化 int i = 0; while(str[i] != '/0') { printf("%c",str[i]); i++; } return 0;}运行,输出结果为:/*Test A Result*/abc这说明什么问题?说明用常量进行初始化的字符数组,系统会原创 2011-01-14 17:30:00 · 1226 阅读 · 0 评论 -
strlwr()函数的实现
strlwr(char *s)函数作用是将字符串s中的大写字母全部转换为小写字母,并返回指向s的指针;自己写个小程序,应该是可以实现的!char *strlwr(char *s){ char *str; if( s == NULL){ //判断空值 return NULL; } str = s; //记录首地址位置 while(*str != '/0') { if(*str > 'A' && *str原创 2011-01-14 16:29:00 · 2658 阅读 · 0 评论 -
不完美的C --从《C陷阱和缺陷》说起 [可移植性缺陷]
1.内存位置 0 null 指针并不指向任何对象.当试图去访问一个NULL位置的值的时候,通常有下面这几种情况:A.内存位置 0 强加了硬件级的保护,程序立即终止执行!B.内存位置 0 只允许读,不允许写;这样,*str不过是垃圾信息.C.内存位置 0 允许读,也允许写;这样,错误的使用null指针,会造成致命伤害的!下面这个例子表明了你的机器是否允许读/写等;#include #include void main(){ char *p; p = NULL;原创 2011-01-14 15:21:00 · 1212 阅读 · 0 评论 -
谈谈C中变量内存分配和释放的原则
以后再说!原创 2011-01-07 18:55:00 · 934 阅读 · 0 评论 -
C编程小技巧,持续更新ing
1.關於字符串互轉如何實現? 一般來講,就是通過strlen(str)求出長度,設置中將temp,持續替換.2.如何讓int型變量的位互換? 同樣的,但是這裡面控制長度循環的時候,有個技巧. for(int i = 0; (i>1; i++); //sizeof(int),適應多平臺編程,而移位1,也就是除以2的意思,正好是循環的次數!原创 2011-01-06 10:07:00 · 447 阅读 · 1 评论 -
求0-2000内所有素数【筛选法】
所谓素数也叫做质数,它的定义如下:该数只能被1和它本身整除。核心算法:筛选法,凡是素数的倍数全部去除。 代码如下:#include #define NUMS 2000int main(int argc, char **argv){ int di[NUMS]={0}; for(int i=2;i<=NUMS;i++) { di[i-1]转载 2012-01-30 17:30:09 · 526 阅读 · 0 评论