![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
pencher_liu
这个作者很懒,什么都没留下…
展开
-
无表头单链表一些基本操作
这里主要写了链表的插入(头插,尾插,中间插),删除,遍历操作。#include <stdio.h>struct node{ int num; struct node *next;};typedef struct node Node;typedef struct node * Link;void creat_link(Link *head){ *head = NULL;原创 2016-12-19 22:52:55 · 856 阅读 · 0 评论 -
字符串处理函数的编程实现
1.strlen的实现int my_strlen(char *src){ int count = 0; while(*src != '\0') { count++; src++; } return count;}2.strcpy的实现char * my_strcpy(char *dest, char *src){ char原创 2016-12-04 21:13:39 · 402 阅读 · 0 评论 -
键盘输入字符串(含数字和字母),输出最长的数字子串和数字个数
#include <stdio.h>#define MAX_SIZE 1024int constant_max_num_str(char *dest, char *str){ int i; int count = 0; int max_len; while(*str != '\0') { while(*str >= '0' && *str <=原创 2016-11-21 23:08:53 · 1705 阅读 · 0 评论 -
malloc原理
malloc函数的一种简单的原理性实现malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针malloc()工作机制 malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以转载 2016-12-02 22:56:54 · 454 阅读 · 0 评论 -
读写有名管道
1.返回字节数的读操作:#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <errno.h>#include <fcntl.h>#include <stdlib.h>#include <memory.h>#define FIFO_SEVER "/tmp/fifosever"int main(int原创 2016-11-20 22:43:01 · 384 阅读 · 0 评论 -
现有开发中主流的编程语言简述
在现有开发中有哪些编程语言?所运用的领域?JAVA1.Android应用 许多的 Android应用都是Java程序员开发者开发。虽然 Android运用了不同的JVM以及不同的封装方式,但是代码还是用Java语言所编写。相当一部分的手机中都支持JAVA游戏,这就使很多非编程人员都认识了JAVA。2.在金融业应用的服务器程序 Java在金融服务业的应用非常广泛,很多第三方交易系统、银行、金融机构原创 2016-11-19 23:00:26 · 1492 阅读 · 0 评论 -
嵌入式开发编程修养——C语言篇
什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快? 我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对 于速度快,只要编得多也就熟能生巧了。 我认为好的程序员应该有以下几方面的素质: 1、有专研精神,勤学善问、举一反三。 2、积极向上的态度,有创造性思维。 3、与人积极交流沟通的能力,有团队精神。 4、谦虚谨慎,转载 2016-12-01 23:07:19 · 424 阅读 · 0 评论 -
系统调用open函数
open() 系统调用通过open()系统调用来打开文件并获得一个文件描述符。#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open (const char *name, int flags);int open (const char *name, int flags, mode_tmode);open()原创 2016-11-15 21:54:27 · 3488 阅读 · 0 评论 -
野指针的一些认识
什么是野指针随机指向一块内存的指针,称为野指针。野指针容易引起内存泄露。 非法访问:内存资源是由操作系统管理的,使用之前要向操作系统申请。野指针访问的那块内存空间可能是未向操作系统申请的内存空间,因为会被认为是非法访问。不是每次野指针都会报段错误,因为野指针获得的地址可能是已经向操作系统分配或申请过的变量的地址。如何避免野指针避免野指针,应该养成以下良好的编码习惯: 1.当一个指针没有指向时,将原创 2016-11-30 23:26:48 · 248 阅读 · 0 评论 -
文件编程——系统文件编程练习
#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#define MAX 100int read_line(int fd, char *buf, int count){ int i; char ch; for(i = 0; i原创 2016-11-14 22:41:30 · 340 阅读 · 0 评论 -
请编写一个C函数,该函数将一个字符串逆序
#include <stdio.h>#include <string.h>char *reserve(char *s){ int i; //定义循环变量 int n = strlen(s)/2; //循环次数只能到字符串长度的一半,否则待会交换又会换回来 char tmp; for(i = 0; i <= n; i++) //这里用的是字符数组处理字符原创 2016-11-02 19:25:37 · 6462 阅读 · 1 评论 -
嵌入式数据库sqlites编程
#include <stdio.h>#include <sqlite3.h>#include <stdlib.h>int create_table(sqlite3 *db){ char *errmsg = NULL; char *sql; sql = "create table if not exists mytable (id integer primary key,原创 2016-11-13 23:07:56 · 322 阅读 · 0 评论 -
函数实现键盘输入整型数,将其转换成字符串输出。123456789 "123456789"
#include <stdio.h>#include <string.h>#define MAX_SIZE 1024char *transform(int num,char *a){ int i = 0; int len; char temp; while(num != 0) { a[i] = num % 10 + '0'; n原创 2016-11-22 22:15:36 · 1815 阅读 · 0 评论 -
字符数组的使用
一维字符数组,二维字符数组,字符指针数组#include <stdio.h>#include <stdlib.h>void printf_array1(char *src){ printf("array1 = %s\n",src);}void printf_array2(char (*src)[100]){ int i; for(i = 0 ; i < 3; i++)原创 2016-12-05 22:23:40 · 228 阅读 · 0 评论 -
位操作运算符
位操作运算符的应用& 1.对特定位清0 mask中的特定位为0,其余位为1。s = s & mask;2.取某数中的指定位 mask特定位置1,其余位0。| 常用来将源操作数某些位置1,其余位不变 mask特定位置为1,其余位为0。^ 1.使特定位取反 mask特定位置1,其余位为0; 2.不引用第三方变量,交换值a = a ^ b;b = a ^ b;a = a ^ b;编程题原创 2016-12-18 23:03:03 · 665 阅读 · 0 评论 -
函数的执行过程
函数执行过程1.通过函数名字找到函数入口; 2.给形参分配空间; 3.传值; 4.执行函数体语句; 5.返回,释放空间。函数传参时什么时候传地址,什么时候传值?1.当只使用不修改实参变量对应空间的值,传实参变量名; 2.当使用并修改实参变量对应空间的值,传实参变量的地址。 举个例子:#include <stdio.h>void func(char *ptr){ ptr++;}原创 2016-12-09 23:54:20 · 780 阅读 · 0 评论 -
数据类型
什么是数据类型?数据集合的划分,不同数据类型对CPU的意义是不一样的。数据类型有哪些?数据类型分为两大类:基本数据类型和复合数据类型。基本数据类型分为:空类型,字符型和数值型。复合数据类型分为:数组,结构体,联合体,枚举类型,指针类型。 其中数值类型分为:实型,整型。实型分为:单精度实型,双精度实型。整型分为:短整型,整型,长整型。其中每个又分为:有符号,无符号。字节长度字节长度:变量所占内存空间的原创 2016-11-27 23:54:13 · 453 阅读 · 0 评论 -
变量和常量
什么是变量?变量的特点?其值在其作用域内可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储空间。变量在使用前必须要定义,每个变量都有自己的地址。变量依据其定义的类型,分为不同类型,如整型变量、字符变量、浮点型变量、指针型变量等。变量的值可以发生改变,意味着它可以被覆盖、被写入、被赋值。每个变量必须要有一个名字和它所在内存空间绑定。 变量的三个特点: 变量的数据类型:主要说明变量原创 2016-11-27 00:16:24 · 309 阅读 · 0 评论 -
指针和数组的区别
指针和数组的区别主要体现在如下几个方面:1.空间分配数组分配空间时是静态分配,你定义多大的数组就分配多大的空间,并自动分配一片连续的内存空间; 指针变量本身是分配4字节的空间,但是指针可以结合malloc,calloc,realloc等函数动态分配空间,通过指针来访问由这些函数分配的内存空间。 所以从这点上看,指针的空间利用率要高于数组。2.访问效率数组通过下标直接访问,虽然访问效率高于指针,但原创 2016-12-08 23:05:29 · 1083 阅读 · 0 评论 -
编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,及将句子中的单词位置倒置,而不改变单词内部结构.
#include <stdio.h>#include <string.h>#define MAX_SIZE 1024void reverse_word(char ch[]){ int count = 0,i,flag = 0; char *p = ch; char a[10][10]; while(*p != '\0') { flag =原创 2016-11-25 23:56:27 · 891 阅读 · 0 评论 -
malloc、realloc、calloc的用法,作用,区别,及实现原理
先来看一下三个函数的声明:void * malloc(unsigned size);void * realloc(void *ptr, unsigned newsize);void * calloc(size_t numElements, size_t sizeofElement);它们都包含在 #include <stdlib.h>头文件中,他们的返回值都是请求分配的地址,如果请求失败就返回N转载 2016-12-07 22:21:13 · 541 阅读 · 0 评论 -
函数之传入参数,传出参数
下面的这个例子用来讲解什么是传出参数,什么是传入参数?通过具体的例子帮助大家理解。#include <stdio.h>int func(int num1, int *num2){ *num2 = 5; return num1 + *num2; }int main(){ int num1 = 5; int num2; int result = func(n原创 2016-12-13 23:04:45 · 13967 阅读 · 0 评论 -
进程等待wait,waitpid
wait函数wait函数用于等待子进程中断或者结束。 wait()函数会暂时停止目前进程的执行,直到有信号来到或者子进程结束为止。如果在调用wait()时子进程已经结束,则wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数status返回,而子进程的进程识别码也会一起返回。如果不在意结束状态值,则参数status可以设成NULL。子进程的结束状态值请参考waitpid()。wait原创 2016-11-24 23:37:26 · 376 阅读 · 0 评论 -
数组认知——整型数组
一维数组1.通过键盘给数组的 每个元素赋值 通过以下的程序来讲解数组名的一些个人理解 int a[3]; int i; int *p = a; //p == a for(i = 0; i < 3; i++) { scanf("%d",&a[i]); scanf("%d",a + i);//scanf("%d",&a[0]); a原创 2016-12-06 22:17:53 · 6361 阅读 · 0 评论 -
复杂指针声明
右左法则这是一个简单的法则,但能让你准确理解所有的声明。这个法则运用如下:从最内部的额括号开始阅读声明,向右看,然后向左看。当你碰到一个括号时就调转阅读的方向。括号内的所有内容都分析完毕就跳出括号的范围。这样继续,直到整个声明都被声明完毕。 对上述右左法则做一个小小的修正:当你在第一次开始阅读声明时,必须从变量名开始,而不是从最内部的括号。下面结合例子来演示一下右左法则的使用。int *(*(*原创 2016-11-23 23:53:09 · 357 阅读 · 0 评论 -
从键盘输入父串,子串,要求删除父串中的子串。
如: 父串:“hellosdhellodsfhellohello” 子串:“hello” 要求删除父串中的hello。#include <stdio.h>#include <string.h>#define MAX_SIZE 1024int my_strncmp(char *s1, char *s2, int len){ int i; for(i = 0; i < len;原创 2016-11-29 22:42:52 · 337 阅读 · 0 评论 -
C语言编程小练习
1.输入一个字符串,计算字符串中子串出现的次数#include <stdio.h>#include <string.h>#define MAX_SIZE 30int main(){ int len; int i; int j; int flag = 0; int count = 0; char str1[MAX_SIZE]; char str原创 2016-11-16 23:17:59 · 449 阅读 · 0 评论 -
库函数文件编程练习
1.文件复制#include <stdio.h>#include <stdlib.h>int main(){ FILE *from_fptr; FILE *to_fptr; char ch; if((from_fptr = fopen("a.txt","r+")) == NULL) { printf("from file open error原创 2016-11-12 22:57:31 · 294 阅读 · 0 评论 -
顺序栈的进栈、出栈操作
/*****************************************************copyright (C), 2014-2015, Lighting Studio. Co., Ltd. File name:Author:Jerey_Jobs Version:0.1 Date: Description:顺序栈Funcion List: ***原创 2016-11-06 19:07:49 · 1965 阅读 · 0 评论 -
单链表的逆序(不带表头)
#include <stdio.h>#include <stdlib.h>struct node{ int num; struct node * next;};typedef struct node Node;typedef struct node * Link;void create_link(Link * head){ *head = NULL;}void i原创 2016-11-05 23:12:36 · 314 阅读 · 0 评论 -
链表的插入(头插,尾插,中间插)
#include <stdio.h>#include <stdlib.h>struct node{ int num; struct node * next;};typedef struct node Node;typedef struct node * Link;void create_link(Link * head){ *head = NULL;}void i原创 2016-11-04 22:04:22 · 454 阅读 · 0 评论 -
请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
#include <stdio.h>#include <string.h>#define N 20char *hex(char *s,int num,int n){ char tmp; int i = 0; while (num != 0) { s[i] = num % n; if(s[i] <= 9) {原创 2016-11-03 21:15:24 · 789 阅读 · 0 评论 -
冒泡法排序
#include <stdio.h>int main(){ int a[100]; int i,j,t; int n; printf("Please input n:"); scanf("%d",&n); printf("\nPlease input %d numbers:\n",n); for(i=0;i<n;i++) scan原创 2016-10-23 20:52:34 · 177 阅读 · 0 评论 -
字符串函数strcpy
strcpy是字符串复制函数,作用是将字符串2复制到字符数组1中去。 说明: 1.字符数组1必须定义得足够大,以便容纳被复制的字符串; 2.“字符数组1”必须写成数组名形式(如str1),“字符串2”可以是字符数组名,也可以是一个字符串常量。 3.如果在复制前未对str1数组赋值,则str1各字节的内容是无法预知的,复制时将str2中的字符串和其后的\0’一起复制到字符数组1中,取代字符数组原创 2016-10-23 20:48:58 · 713 阅读 · 0 评论 -
字符串函数strcat
strcat函数作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。这是我自己编写的my_strcat:#include <stdio.h>char *mystrcat(char *str1,char *str2){ char *p = str1; while(*str1) str1++原创 2016-10-23 20:33:54 · 612 阅读 · 0 评论 -
C语言中main函数的参数
我们经常用的main函数都是不带参数的。因此main 后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个, 习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。转载 2016-10-21 23:57:31 · 587 阅读 · 0 评论 -
字符串函数strcmp
strcmp函数是字符串比较的函数,字符串比较的规则:对两个字符串自左往右逐个字符相比(按照ASCII码值大小比较),直到出现不同的字符或者遇到’\0’为止。如果全部字符相同,则认为相等;若出现不相等的字符,则以第一个不相同的字符的比较结果为准。自己编写的strcmp函数:#include <stdio.h>char *mystrcat(char *str1,char *str2){ ch原创 2016-10-21 23:31:16 · 397 阅读 · 0 评论 -
字符串函数strlen
strlen是测量字符串长度的函数。函数的值为字符串中的实际的长度(不包括‘\0’在内)。自己编写的srelen函数:#include <stdio.h>#include <string.h>int my_strlen(char *s){ int length=0; while(*s != '\0') { s++; length++;原创 2016-10-21 23:25:25 · 401 阅读 · 0 评论 -
字符串函数gets
自己编写一个gets函数:第一个版本:#include <stdio.h>char *my_gets(char *c){ char *p = c; while((*c = getchar()) != '\n') { c++; } *c = '\0'; return p;}int main(){ char c[20] = {0}原创 2016-10-21 23:07:53 · 332 阅读 · 0 评论 -
整数算法的简单训练
1.输出1000以内的完数。#include <stdio.h>int main(){ int i; int j; int sum = 0; for(i = 6; i <= 1000; i++) { for(j = 1; j <= i / 2; j++) { if(i % j == 0)原创 2016-11-07 22:51:45 · 155 阅读 · 0 评论