
C知识点
C后台开发从入门到就业
这个作者很懒,什么都没留下…
展开
-
系统内存中的各个存储空间分类及作用
内存分为5部分:1.栈区:又叫堆栈区,每个函数都有自己的栈区。分配空间比堆区快。函数结束释放空间。(例如a[],int a,……)2.堆区:用malloc分配的空间,分配空间速度比栈区慢。只能通过free来释放。不写不会释放,容易造成内存泄漏。(例如malloc())3.全局变量区:写在所有函数之外的变量。已初始化的写在前一半,未初始化的写在后一半,并默认为0。所有函数执行原创 2017-03-29 10:15:51 · 1143 阅读 · 0 评论 -
结构体的声明,定义和赋值以及所占空间的算法
结构体在C中默认是公有的,包含在头文件中。===============================================================结构体声明(在函数外):struct person {int age ;char name[10] ;float high ;}; //person是结构体的数据类型名,可以根据需要随意修改原创 2017-04-01 17:09:04 · 1669 阅读 · 0 评论 -
变量存放的地址有规定!
地址对齐访问:double型和long long型变量所存放的地址眼能被8整除;int型变量所存放的地址能被4整除;short型变量所存放的地址能不被4整除但能被2整除;如果不满足则属于地址非对齐访问,将造成程序崩溃!原创 2017-04-01 21:25:48 · 522 阅读 · 0 评论 -
C语言中的文件操作
打开一个流式文件:头文件:#includeFILE* fa = fopen(const char *path,const char *mode);fclose(fa);//用完要关闭文件。如果成功返回file类型指针,如果错误返回NULL.const char *path指文件名,const char *mode指使用文件方式(r【只读】,r+【读写】,a【追加】,a+【原创 2017-04-07 10:55:04 · 447 阅读 · 0 评论 -
创建C中的静态库和动态库以及他们的优缺点
Linux下库一般放在/usr/lib/目录下:静态库(.a)与动态库(.so)。Windows下为(.dll)。他集成了静态库和动态库的有点。库的名字不包括前面的lib:libtest.so,这个库的名字为test。另外,库不需要加头文件,但需要编译生成目标文件。=======================================================原创 2017-04-04 12:33:46 · 831 阅读 · 0 评论 -
回调函数的意义和用处
回调函数:alarm(3);signal(14,test);//(test是以整形为参数(前面那个14)的函数)工作原理:回调函数可以在程序开始之前设置好条件(3S后会有闹钟信号到来),由于回调函数的优先级很高,当条件信号来临时,停止正在进行的程序,转而执行实现设计好的对策(调用test函数)。执行完毕,在返回之前停止的地方继续向下执行。应用:当关机信号来临时,停止当前进行原创 2017-03-29 10:59:43 · 5614 阅读 · 0 评论 -
C语言中树的建立和遍历
树的遍历分为三种:前序遍历(根左右),中序遍历(左根右),后序遍历(左右根)。PS:根左右,就是先遍历根节点,然后是左子树,最后是右子树。如下图:前序遍历:ABDECF。中序遍历:DBEACF。后序遍历:DEBFCA。PPS:有一种更便捷的方法来写出三种遍历的结果:从根节点开始,从左面画线,将树沿着边界圈起来。按照线在节点的不同位置依次写出数据。其中:前序遍历为线在节点原创 2017-05-02 17:31:50 · 5029 阅读 · 1 评论 -
队列与循环队列
队列的特点:先进先出(FIFO)(first in first out)。有两个指针,分别为头指针和尾指针。出队列时,头指针所指数据取出,头指针加一;入队时,数据进入尾指针所指位置,然后尾指针加一。(可以先加再存/取,也可以先存/取后加。不过要前后一致)。我们先用结构体来模拟简单队列。下列为队列的出入队列代码及结果:#include #include //队列中的数据st原创 2017-05-02 17:53:05 · 413 阅读 · 0 评论 -
C语言中栈的建立和应用
栈的特点为:先进后出(first in last out)。栈中有两个指针,栈顶指针和栈尾指针。其中,栈尾指针是不动的。用栈顶指针等于栈尾指针来判定栈是否为空。压栈时,将栈顶指针+1,然后将数据存入栈顶指针所指向的位置。(先加后村或者现存后加都行;有的是栈顶指针-1)。栈的建立与压栈出栈:#include #include #include //栈里元素个数#define原创 2017-05-02 20:29:22 · 22406 阅读 · 2 评论 -
getopt()函数(分析命令行参数)
头文件:#include 函数形式:int getopt(int argc, char* argv【】, const char* optstring);功能:getopt直接分析命令行参数,找到选项和选项参数以及操作数的准确位置。参数:optstring:optstring里存放需要识别的选项字符(如果该选项有参数,则后面加冒号)。argc:命令行字符串个数原创 2017-05-12 14:43:36 · 795 阅读 · 0 评论 -
Linux中字符串转整形数字的函数
Linux内核中提供的一些字符串转换函数:lib/vsprintf.c 1. unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base) 2. unsigned long simple_strtoul(const char *cp, char **endp, un转载 2017-05-12 15:59:50 · 3956 阅读 · 0 评论 -
Linux中在终端捕获程序的返回值(return 0和exit(0))
在程序运行结束后,在终端(shell界面)上输入命令:echo $?显示的即为上一个程序结束时的返回值(return 1,exit(2),_exit(12)都可以,abort退出时,返回值为随机数)。功能:可以判断上一个程序时在什么情况下结束的:正常情况下,返回值为0即为正常退出;为1或-1为错误终止退出。也可以自己设置值。代码:#include int main原创 2017-05-12 23:04:38 · 10864 阅读 · 0 评论 -
指针的写法和赋值(指针数组与数组指针的区别)
二维数组int a[2][3]《==》 数组指针int (*pa)[3]赋值: int (*pa)[3]=a 或pa=aPS: pa++加一整行;(*pa)++加一个数===============================================================================================一级指针《=原创 2017-03-29 10:13:09 · 1178 阅读 · 0 评论 -
C语言中隐藏输入的代码
有些系统或软件输入密码时看不见我们所输入的字符,这里写一下这个简单代码:运行后,只要不输入‘x’,就别想继续运行,而输入的字符也全部都看不见!#include #include #include #include int main(){ struct termios old, new; tcgetattr(0, &old); // 获取终端属性 new = o原创 2017-04-01 21:03:35 · 6352 阅读 · 0 评论 -
可以在main函数之前执行的函数
应用于设置密码来限制进入main函数的权限:#include int main(){printf("main \n");return 0; }__attribute((constructor)) int before_main() //main函数之前执行。注意前面是两个下划线{printf("before main \n");}原创 2017-04-01 20:51:14 · 510 阅读 · 0 评论 -
函数声明定义使用的书写格式
声明:int test(int ,char* )int test(int a,char* s)两者都可以,但第一种比较常见。定义:int test(int a,char* s){……}使用:int a = test(int a,char* s)PS:在调用函数时,实参和形参可以使用相同的变量(如int a,int* a,int a[]),两者互不冲突原创 2017-03-29 10:36:22 · 7810 阅读 · 0 评论 -
跳出循环的方法
continue:(继续)跳出本次单次循环,继续下一次循环。break:跳出当前一层循环(for,while)。goto:可随意跳转位置。for( i=0 ; ifor( j=0 ; j…………}……写入下面语句后:continue:进行下一次j的循环;break: 跳出j循环,进行下一个i循环;goto: 可以跳出多条循环;(goto原创 2017-03-29 10:40:11 · 733 阅读 · 0 评论 -
C语言中.h开头文件的书写和用法
#include这种头文件可以自己书写。#include#include#include“”现在当前目录中查找头文件,找不到才会去系统指定的库中查找头文件。例如:#include“common.h”; #include“common/common.h”(可以指定路径。此为当前目录下,common文件夹 下的common.h原创 2017-04-07 16:20:20 · 26789 阅读 · 0 评论 -
Makefile文件编写和运行
#####Makefile#####CC = gccFLAG = -cOUTPUT = -oOBJ = testALL = main.c test.c hello.c//一共编写了3个.c文件,其中main.c中为main函数,其他 为子函数。$(OBJ):$(ALL)$(CC) $^ $(OUTPUT) $(OBJ)%o:%.c$(CC)原创 2017-03-31 12:29:02 · 1731 阅读 · 0 评论 -
C语言中关键字作用(const和static和extern)
存储类型关键字(4个):auto:声明自动变量,现在一般不用(auto int a;和int a;一样)register:声明寄存器变量static:声明静态变量。该变量声明时系统所分配的空间,在整个执行期间始终存在,所有程序执行完毕才会回收该空间。用作局部变量(在某函数内声明)时,不可在其它函数中调用;但用作全局变量(在函数外声明)时,可以在整个文件(一个.c文件)中的所原创 2017-03-31 10:19:21 · 1467 阅读 · 0 评论 -
void*与void;strlen与sizeof;memset
float*是不存在的。void与void*的区别:void只修饰函数,即表示没有返回值或没有参数;不能修饰变量。void*可修饰函数,也可修饰变量。修饰变量时,void* pa为空指针;修饰函数时,可以接收int*和char*的参数(需要强转类型),可以使函数功能强大。strlen()和sizeof()的区别:strlen()是用来输出参数中指针所指的字符串个数,与分配空间无原创 2017-03-31 11:07:07 · 386 阅读 · 0 评论 -
段错误产生原因;和;计算机大端小端概念和判别方法
段错误产生原因(以下为错误示范):1.给只读区写入数值:char* pa = "hello";pa[2]='w';2.读写低地址:int pa = 100 ;printf(“%s”,*pa);计算机的大端和小端:大端是从高位开始进行存储(低位数据对应高地址,高维数据对应低地址)小端是从低位开始进行存储(低位数据对应低地址,高维数据对应高地址)如果存入ox443322原创 2017-03-31 11:24:59 · 324 阅读 · 0 评论 -
main()里的argc与argv
int main(int argc, char* argv[])argc记录命令行参数;argv记录外部输入的数据;如:./main.c hello world 123 456 xxxargc==6argv[0]==./mainargv[1]==helloargv[2]==worldargv[3]==123argv[4]==456argv[5]=原创 2017-03-31 11:52:00 · 268 阅读 · 0 评论 -
一些宏的用处
可运用在程序查错等地点注意:下划线是两个连着的!__FUNCTION__:打印该宏所在的函数名 。用法:printf("%s",__FUNCTION__);__func__:是上面宏的小写形式 。用法:printf("%s",_func_);__LINE__:打印该宏所处的行数 。用法:printf("%d",__LINE__);原创 2017-04-10 20:03:38 · 266 阅读 · 0 评论 -
用C语言写随机数
随机数分为两种:伪随机数和真随机数。伪随机数:#include void srand(unsigned int seed);int rand(void);用之前需要输入种子,程序会根据种子进行一系列运算,得到随机数。如果不给种子,程序会默认上一次的种子。同一个种子分别输出100个随机数的话,随机数相同。所以每次用随机数的时候最好用不同的种子:用时间来代替种子!让se原创 2017-04-10 20:09:11 · 1287 阅读 · 0 评论 -
strtok分割字符串
头文件:#include定义:切割字符串函数,改变原本的字符串,将str字符串按delim字符串中有的字符进行切割,返回切割后的字串首地址,原str字串为切割过后的首地址。 函数原型: char *strtok(char *str, const char*delim);样列(将字符串按空格和回车分隔开): void cutchar(char* tm原创 2017-04-10 20:53:48 · 445 阅读 · 0 评论 -
用C语言画图
在没有桌面和图形文件的系统界面,可以通过C语言的编程来实现在黑色背景上画图!用下面的代码,在需要的地方(有注释)适当修改,就能画出自己喜欢的图形!PS:同样要编译运行后才能出效果。#include #include #include #include #include #define RGB888(r,g,b) ((r & 0xff) <<16 | (g & 0xff)原创 2017-04-07 20:55:06 · 38308 阅读 · 5 评论 -
C语言中如何计算程序运行的时间
使用gettimeofday函数,注意要加头文件sys/time.h#include #include unsigned long long fibnacci(int n){if(n == 1 || n == 2)return 1;return (fibnacci(n-1) + fibnacci(n-2));}int main(){s原创 2017-04-01 20:36:19 · 8781 阅读 · 0 评论