
C基础
文章平均质量分 72
深度Java
这个作者很懒,什么都没留下…
展开
-
结构成员访问的三种方法
结构成员访问的三种方法#include "stdio.h"#include "string.h"#include main (){struct student{int num;char * name;int score;}stu;struct student *p=&stu;stu.num=1;(*p).name="tom";p->s原创 2004-10-25 10:49:00 · 6361 阅读 · 1 评论 -
单链表功能大全
单链表很全的例子,增加,删除,排序,都有了#include #include typedef struct node{int nDate;struct node *pstnext;}Node;//链表输出void output(Node *head){Node *p = head->pstnext;while(NULL != p){ pri原创 2004-10-29 20:17:00 · 13283 阅读 · 5 评论 -
scanf()函数的用法和实践
scanf()函数的用法和实践摘要:本文阐述了基于ANSI,Win 95,Win NT上的 C/C++语言中scanf()函数的用法,以及在实际使用中常见错误及对策。关键词:scanf()一、 序言在CSDN论坛的C/C++版块,我时常见到“对于scanf()函数的用法、及出现的各种错误而迷惑”的帖子,萌发了我写这篇文章的念头。文中结合自身在学习和编程中对它的认识和体会,原创 2007-03-19 19:10:00 · 2804 阅读 · 2 评论 -
sizeof 操作符详解
1. 定义: sizeof是何方神圣? sizeof 乃 C/C++ 中的一个操作符(operator)是也。简单说其作用就是返回一个对象或者类型所占的内存字节数。 MSDN上的解释为: The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (includin原创 2007-03-19 19:07:00 · 4389 阅读 · 3 评论 -
typedef和define具体的详细区别
1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如: #define PI 3.1415926 程序中的:area=PI*r*r 会替换为3.1415926*r*r原创 2011-08-27 05:10:13 · 41631 阅读 · 19 评论 -
C语言宏定义使用技巧
写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等。下面列举一些成熟软件中常用得宏定义。。。。。。1,防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H //头文件内容#endif2,重新定义一些类型,原创 2011-08-27 12:40:22 · 3437 阅读 · 5 评论 -
考察新人的两道c语言题目
1> 如何判断一个板子的cpu 是big-endian 还是 Little-endian的?用c实现非常简单,10行左右,就可以判断了, 关键考察新人是否了解了什么是endian ,big-endian与little-endian的区别在哪里, 如果这些不清楚,就算c再强,也是憋不出来的。2> 判断了 endian 后, 如何进行转换, 写两个函数。如果说上面的那个, 可能不能正确的考察出新人的c原创 2007-03-19 19:08:00 · 3450 阅读 · 0 评论 -
C语言memset函数详解(Linux下和windows下的差异)
memest原型 (please type "man memset" in your shell) void *memset(void *s, int c, size_t n); memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种原创 2011-08-30 16:12:19 · 6220 阅读 · 6 评论 -
说透指针
int a=1;int * b=&a;int **c=&b;printf("&a:%d",&a);printf("b:%d",b);printf("&b:%d",&b);printf("*b:%d",*b);printf("**c:%d",**c);printf("*c:%d",*c);printf("c:%d",c);print原创 2005-03-12 10:51:00 · 9468 阅读 · 3 评论 -
#pragma pack(n) 的作用
在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在原创 2011-08-29 17:24:08 · 13959 阅读 · 1 评论 -
C语言的内联函数的作用
关内联函数键字inlinevoid myprintf(int a){ priintf("%d",a);}int main(){for(i=0;i<100;i++)myprintf(3);} 对于这个函数,在进行反复的打印3的过程中我们是原创 2011-08-27 03:19:18 · 11268 阅读 · 6 评论 -
Linux下用C获取当前系统时间
#include time_t time(time_t calptr); 返回的是日历时间,即国际标准时间公元1970年1月1日00 : 00 : 00以来经过的秒数。然后再调用 char *ctime(const time_t calptr) ; 转化为字符串表示 #include #include int main原创 2007-03-19 19:12:00 · 22013 阅读 · 0 评论 -
C语言单向链表的实现
一个简单结点的结构体表示为: struct note { int data; /*数据成员可以是多个不同类型的数据*/ struct note *next; /*指针变量成员只能是-个*/ }; 一个简单的单向链表的图示 1.链表是结构、指针相结合的-种应用,它是由头、中间、尾多个链环组成的单方向可伸缩的链表,链原创 2004-10-30 16:30:00 · 52625 阅读 · 20 评论 -
GCC生成的汇编代码
假设我们写了一个C代码文件 code.c包含下面代码:int accum = 0;int sum(int x, int y){ int t = x + y; accum += t; return t;}这是用echo命令输入源码的效果,简单的就是最好的:) 一、查看GCC生成的汇编代码在命令行上用“-S”选项,就能看到C编译器产生的汇编代码: #gcc -S code.c 注意原创 2007-03-20 22:43:00 · 37429 阅读 · 7 评论 -
计算机编程简史图
计算机编程简史图 www.21kaiyun.com 21世纪开运网 算准你每天的桃花运 帮忙推广下我的网站 谢谢原创 2010-07-26 11:11:00 · 2811 阅读 · 2 评论 -
区分C语言中getch、getche、fgetc、getc、getchar、fgets、gets
首先,这两个函数不是C标准库中的函数, int getch(void) //从标准输入读入一个字符,当你用键盘输入的时候,屏幕不显示你所输入的字符。也就是,不带回显。 int getche(void) //从标准输入读入一个字符,键盘输入的时候,屏幕显示所输入的字符。带回显。 这两个函数包含在头文件conio.h中,需要记住的是conio.h不是C标准库中的头文件。Micorso原创 2004-11-04 11:06:00 · 6916 阅读 · 1 评论 -
两个无序单链表,排序后合并成一个有序链表
两个无序单链表,排序后合并成一个有序链表 算法思想:用冒泡法,对链表1和2进行排序,对排序后的两个链表,从小到大进行循环,装入链表3中。#include#includestruct stud/*定义链表*/{int data;struct stud *next;};void pai_xue(struct stud *head1,struct stud原创 2007-03-19 19:36:00 · 24928 阅读 · 5 评论 -
C语言整型数据类型
int数据类型的位数为16位,short int数据类型的位数也是16位。而long int的位数为32位,可用来存储比较大的整数。 short int 和 long int可以缩写为short 和 long。 C语言中的整型数据类型int、short原创 2011-09-07 19:31:33 · 17931 阅读 · 0 评论 -
Linux下C语言的fgets与fputs
使用的是 CentOS gcc编译下面程序 显示warning: the `gets function is dangerous and should not be used.问题出在程序中使用了 gets Linux 下gcc编译器不支持这个函数,解决办法是使用 fgetsfgets()函数的基本用法为: fgets(char * s,int size,FILE * stream); /*原创 2007-03-24 15:24:00 · 5951 阅读 · 0 评论 -
服务器端开发经验总结 Linux C语言
简介在进行服务器端开发的时候需要考虑一些算法和性能问题,经过了几年的开发,对这方面有了一些经验,现在写下来跟大家分享和讨论。我主要是在Linux下进行C语言的开发,所以后面的实现都是基于Linux操作系统并用C语言来讲解。其它平台和语言需要考虑的问题是类似的只不过可能是实现细节上有一些差异,我尽量减少这些差异吧。注意一下讲解的所有内容都是基于32位系统的开发!服务器程序开发核心是稳定,在稳定的前提原创 2011-06-28 22:51:00 · 5070 阅读 · 2 评论 -
Linux编译器GCC的使用
嵌入式Linux编译器GCC的使用1、GCC概述作为自由软件的旗舰项目,Richard Stallman在十多年前刚开始写作GCC的时候,还只是仅仅把它当作一个C程序语言的编译器,GCC的意思也只是GNU C Compiler而已。经过了这么多年的发展,GCC已经不仅仅能支持C语言,它现在还支持Ada语言、C++语言、Java语言、Objective C语言、PASCAL语言、COBOL语言,并原创 2004-11-04 19:09:00 · 5998 阅读 · 2 评论 -
Linux下用C语言最基本的程序开发与调试
1.建一个目录2.写代码,建一个hello.c文件代码:view plaincopy to clipboardprint?#include "stdio.h" main() { printf("Hello Linux.") } #include "stdio.h" main() { printf("Hello Linux.") } 记得最后一定要换行原创 2007-03-21 23:47:00 · 5461 阅读 · 1 评论 -
C语言字节对齐
文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是原创 2011-08-29 16:06:57 · 149306 阅读 · 93 评论 -
linux上使用strace查看C语言级别的php源码【一种方法】
如果你希望看到C语言级别的php代码就需要使用strace这个默认是安装了的,如果没有安装可以#yum install strace 查看httpd进程#ps auxw | grep httpd有多个,必须停止apache [root@localhost usr]# /usr/local/webserver/apache2/bin/apachectl stop 启动单进程httpd[root@lo原创 2012-11-18 00:06:04 · 16340 阅读 · 3 评论 -
自己开发操作系统
算是《30天自制操作系统》的读书笔记吧,但是我觉得原书不少地方啰嗦,某些做法值得商榷http://product.china-pub.com/3682838 1.二进制编译器首先下载Bzl1621.lzh,这个可以把二进制数编辑的软件。BZ启动画面 打开img文件 2.使用虚拟机加载IMG文件注意要使用软驱加载 运行结果: 3.使用NASM编译汇编语言格式下载NASM:http://www.na原创 2012-11-17 00:05:17 · 9019 阅读 · 2 评论 -
C语言位操作
C语言是一种中级语言,能对计算机硬件直接操作,这就涉及到位的概念。一、位的概念 我们知道,在计算机中,一字节占8位(现在的某些电脑也有占16位的),这样表示的数的范围为0-255,也即00000000-11111111。位就是里面的0和1。 char c=100; 实际上c应该是01100100,正好是64H。其中高位在前,低位在后。原创 2011-12-06 11:00:52 · 5109 阅读 · 1 评论 -
Linux0.01内核根目录Makefile注释
## Makefile for linux.# If you don't have '-mstring-insns' in your gcc (and nobody but me has :-)# remove them from the CFLAGS defines.###8086汇编编译器和连接器. -0生成8086目标程序;-a生成与gas和gld部分兼容的代码#AS86转载 2012-12-10 14:02:15 · 10500 阅读 · 2 评论 -
使用VS2010调试技巧让C指针无处遁形
Linux 下调试远没有windows下的VS方便,不管是VC++6还是VS2003,2005,2008,2010,2012.VS2012自动格式化代码 Ctrl+K+DVS下调试一定要注意尽量不要用F11,要用F10!不然需要引入库文件,提示的警告信息可以“忽略”即可所以我觉得不妨用VS调试程序,可以用VS来研究C语言似乎是一个比较不错的主意,当你的C已经很好的时候可以直接在Linux下去手写代原创 2011-08-27 00:09:31 · 10141 阅读 · 2 评论 -
C和指针学习
C和指针学习最后更新时间:2012.12.3原则:尽量短小精悍,实用,需要扩充阅读都是以链接形式出现注意:本文主要是针对Unix环境下的C目 录一.编译与链接二.特殊字符三.数据类型四.修饰符五.运算符六.控制语句七.函数八.指针九.数组十.字符串十一.结构十二.union联合十三.typedef声明十四.预处理器十五.输入输出十六.文件十七.内存十八.异常十九.链表二十.树正 文一.编译与链接1原创 2008-06-24 18:15:00 · 38055 阅读 · 29 评论 -
gcc -E 选项
-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面. 例子用法: gcc -E hello.c > pianoapan.txt gcc -E hello.c | more 慢慢看吧,一个hello word 也要与处理成800行的代码 -E选项,表示让gcc只进行“预处理”就行了。 所谓的预处理,就是把程序中的宏展开, 把头文件的内容展开包含进来等等一原创 2013-10-11 09:50:47 · 8125 阅读 · 4 评论 -
从Nginx源码谈大小写字符转化的最高效代码以及ASCII码表的科学
说起大小写字母转换,大家很容易想起系统函数是不是,几乎所有的编程语言都提供了这种转换函数,但是你有没有想过这背后是怎么实现的?然你写怎么实现?我们都知道Nginx是目前用的最多的Http服务器,那么他的代码相信也是最高效率的,事实也是如此,最起码我找不到比他的处理方法更好的了,如果你有欢迎告诉我。nginx源码有这样一段宏,用来做大小写字母的转换:nginx-1.6.1/src/core/ngx_原创 2014-11-18 19:43:00 · 5740 阅读 · 4 评论 -
Unix/Linux开源世界资源链接汇总【不断更新】
最后更新:2012.12.04说明:好东西在后面,Linux镜像基本涵盖全球主要下载点。【长期更新】世界很大,我们很小,学海无涯,书山有路!一.内核Unix代码大全http://minnie.tuhs.org/UnixV6https://github.com/Rajmohan/UnixV6编程语言开源框架等使用统计网址http://w3techs.c...原创 2019-11-22 09:47:25 · 51363 阅读 · 11 评论 -
Unix下C程序内存泄漏检测工具Valgrind安装与使用
Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。 Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖。 Valgrind遵守GNU通用公共许可证条款,是一款自由软件。 官网http://www.valgrind.org 下载与安装#wget http://www.原创 2012-11-11 21:39:40 · 37589 阅读 · 6 评论 -
按位与、或、异或等运算方法
按位与运算符(&)参加运算的两个数据,按二进制位进行“与”运算。运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1; 即:两位同时为“1”,结果才为“1”,否则为0例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1。 另,负数按补码形式参加按位与运算。“与运算”的特殊用途:(1)清零。如果想将一原创 2012-03-23 15:00:08 · 71731 阅读 · 6 评论 -
C语言的sizeof和strlen
strlen是函数,而sizeof是算符。strlen需要进行一次函数调用,而对于sizeof而言,因为缓冲区已经用已知字符串进行了初始化,起长度是固定的,所以sizeof在编译时计算缓冲区的长度。 因为sizeof()测试的是数组的长度。而strlen测试的是字符串的长度。在定原创 2011-08-30 16:05:43 · 4769 阅读 · 2 评论 -
冒泡排序
冒泡排序算法的思想:很简单,每次遍历完序列都把最大(小)的元素放在最前面,然后再对剩下的序列从父前面的一个过程,每次遍历完之后待排序序列就少一个元素,当待排序序列减小为只有一个元素的时候排序就结束了.因此,复杂度在最坏的情况下是O(N ^ 2).void Swap( int * a, int * b) { int temp; temp = * a原创 2007-03-19 19:27:00 · 5641 阅读 · 1 评论 -
插入排序
插入排序是最简单最直观的排序算法了,它的依据是:遍历到第N个元素的时候前面的N-1个元素已经是排序好的了,那么就查找前面的N-1个元素把这第N个元素放在合适的位置,如此下去直到遍历完序列的元素为止.算法的复杂度也是简单的,排序第一个需要1的复杂度,排序第二个需要2的复杂度,因此整个的复杂度就是1 + 2 + 3 + ... + N = O(N ^ 2)的复杂度. 直接插入排序(straight i原创 2007-03-24 12:49:00 · 7212 阅读 · 2 评论 -
希尔排序
希尔排序(shell)是对插入排序的一个改装,它每次排序把序列的元素按照某个增量分成几个子序列,对这几个子序列进行插入排序,然后不断的缩小增量扩大每个子序列的元素数量,直到增量为一的时候子序列就和原先的待排列序列一样了,此时只需要做少量的比较和移动就可以完成对序列的排序了.#include ;void Shell_Sort(int a[], int n) { int h,i原创 2007-03-20 01:10:00 · 7951 阅读 · 4 评论 -
从hello world 说程序运行机制
http://www.cnblogs.com/yanlingyin/archive/2012/03/05/2379199.html 开篇学习任何一门编程语言,都会从hello world 开始。对于一门从未接触过的语言,在短时间内我们都能用这种语言写出它的hello world。然而,对于hello world 这个简单程序的内部运行机制,我相信还有很多人都不是很清楚。hello world 这转载 2012-03-05 18:03:34 · 4508 阅读 · 2 评论 -
C语言九阴真经
发现记忆力越来越差,所以干脆搞这么一个东西,就是把C语言的最常用的语法汇编在一起,不断完善。这样以后只要经常把这个回顾一下就可以了。不然去翻书太多了。。。 f.h#define Area 1000 struct student{char *last_name;int student_id;char grade;int a;};h.c#include #include原创 2012-03-15 18:22:31 · 7150 阅读 · 4 评论