![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言高级编程
马赛克|
搬砖的转行去烧砖!
展开
-
qsort()函数学习
一:描述qsort函数包含在<stdlib.h>的头文件,能够对数组实现快排二:函数声明与参数解释void qsort( void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *) );数组名是 base数组的个数是 ...转载 2020-02-09 16:04:05 · 154 阅读 · 0 评论 -
C语言str系列与mem系列函数总结
目录一:前言二:str系列2.1strlen2.2 strcpy2.3 strcmp2.4 strcat2.5 strncpy2.6 strncmp2.7 strncat2.8 strchr三:mem系列3.1memset3.2 memcpy3.3 memcmp3.4 memchr3.5 memmove一:前言这两个系列函...原创 2020-01-04 18:06:59 · 1659 阅读 · 0 评论 -
goto
一:前言goto是循环的本质,对应汇编中的jmp跳转,c中的while,do while 和for在程序编译时,都要拆解为汇编的jmp.goto语句--无条件跳转语句,使用方法为 goto 语句标号语句标号的命名规则和C语言的变量命名规则一样,例如goto lable_ 合法 goto 123 不合法goto的使用场景最主要分为如下两种向上跳转,实现循环 向下跳转,实现中间...原创 2020-01-03 20:18:50 · 823 阅读 · 0 评论 -
二叉树的编程
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>struct BinaryNode{ char ch;//数据域 struct BinaryNode *lChild;//左孩子节点 struct BinaryNode *rCh...翻译 2019-12-01 23:17:57 · 216 阅读 · 0 评论 -
二叉树的递归遍历
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>struct BinaryNode{ char ch; //数据域 struct BinaryNode * lChild; //左孩子节点 struct BinaryNode ...翻译 2019-12-01 23:17:02 · 461 阅读 · 0 评论 -
静态链表和动态链表
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include<string.h>//1.静态链表///节点的声明struct LinkNode{ int num;//数据域 struct LinkNode *next;};void test01...翻译 2019-12-01 23:10:37 · 101 阅读 · 0 评论 -
单向链表
关于指向结构体的指针变量用指针引用结构体成员变量的方式是:(*指针变量名).成员名但是,为了使用的方便和直观,可以直接使用指针变量名->成员名注:“->”是指向结构体成员运算符,它的优先级同结构体成员运算符“.”一样高p->num的含义是:指针变量p所指向结构体变量中的num成员,p->num代表的就是num这个成员的内容#defin...翻译 2019-12-01 23:05:39 · 206 阅读 · 0 评论 -
链表的基本使用
linkList.h#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct LinkNode{ int num; struct LinkNode * next;}LinkNode;//初始化链表,...翻译 2019-11-18 22:44:11 · 135 阅读 · 0 评论 -
文件读写总结
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include<string.h>//1.字符的读写 fgetc(),fputc()void test01(){ //写文件 FILE * f_write = fopen("./1.txt","w"); i...翻译 2019-11-13 22:26:50 · 138 阅读 · 0 评论 -
结构体的总结
结构体的基本概念#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include<string.h>typedef struct Person{ char name[64]; int age;//不要在定义结构体的时候赋初值}myPerson;//my...翻译 2019-11-05 23:00:40 · 180 阅读 · 0 评论 -
数组
一维数组名称#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>void printArray(int arr[],int len)//int arr[]等价于int *arr{ for (int i = 0; i < l...翻译 2019-11-05 21:50:18 · 153 阅读 · 0 评论 -
位运算
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>//1.按位取反 ~void test01(){ int num = 2; printf("~num=%d\n",~num);}//2.按位与void test02()...翻译 2019-10-26 22:45:30 · 122 阅读 · 0 评论 -
二级指针读写文件
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>//获取文件的行数int getFileLines(FILE *file){ if (file == NULL){ return -1; } char buf[1024];...翻译 2019-10-24 23:03:48 · 205 阅读 · 0 评论 -
二级指针做函数参数的输入输出特性
输入特性#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>//二级指针做函数参数的输入特性//主调函数分配内存,被调函数使用void printArray(int **pArray,int len){ for (int ...翻译 2019-10-24 22:24:31 · 182 阅读 · 0 评论 -
const的使用场景
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>struct Person{ char name[64]; int age; int id; double score;};//const使用场景,修饰函数中的形参,防止...翻译 2019-10-23 22:54:02 · 248 阅读 · 0 评论 -
指针的易错点
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>void test01(){ char *p = malloc(sizeof(char)*64); //利用临时的指针,操作里面的内存 char *pp = p; for (...翻译 2019-10-23 22:44:49 · 182 阅读 · 0 评论 -
字符串操作之查找子串
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>//优化思路 memcpy(str,substr,3)==0;int myStrstr(char *str,char *subStr){ int num = 0; while (*...翻译 2019-10-23 22:39:06 · 523 阅读 · 0 评论 -
格式化字符串输入与输出
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>void test01(){ char buf[1024]; memset(buf, 0, 1024); sprintf(buf,"今天是%d年%月%d日\n",2019,10,2...翻译 2019-10-21 23:08:28 · 371 阅读 · 0 评论 -
字符串基本操作、字符串拷贝和字符串反转
一:字符串基本的操作sizeof计算数据的大小,数组包含'\0'字符strlen计算字符串的长度,到'\0'结束void test01(){ //字符串需要有结束的标志 '\0' char str1[] = { 'h', 'e', 'l', 'l', 'o','\0' }; printf("%s\n",str1); //字符数组部分初始化,剩余填0 char str2[...翻译 2019-10-21 22:48:59 · 297 阅读 · 0 评论 -
指针做函数参数的输入输出特性
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>//1.输入特性:主调函数分配内存,被调函数使用内存void func(char *p){ strcpy(p,"hello world");}void test01(){ /...翻译 2019-10-20 22:57:01 · 225 阅读 · 0 评论 -
指针的间接赋值
#include<stdio.h>#include<stdlib.h>#include<string.h>void changeValue(int *p){ *p = 1000;}//1.一个普通变量和一个指针变量(实参+形参)//2.建立关系//3.通过*来赋值void test01(){ int a = 10; int *p = N...翻译 2019-10-20 22:41:22 · 130 阅读 · 0 评论 -
指针的步长
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<stddef.h>//offsetof的头文件//指针步长的意义//1.指针变量+1之后,跳跃的字节数量void test01(){ char *p = NULL; printf("%d\n",p); pri...翻译 2019-10-20 22:31:40 · 180 阅读 · 0 评论 -
空指针和野指针
关于多次free()出现的野指针的原因:指针变量和指针变量所指的内存空间变量是两个不同的概念free()最主要释放的指针变量所指的内存空间,因为内存资源是有限的,很宝贵,需要回收利用但是指针变量本身的值还是之前的指向,未重置成NULL所以再次释放的时候,指向了未知的内存区域,产生野指针避免方法:1.定义指针的时候初始化成NULL2.释放指针所指向的内存空间后,要...翻译 2019-10-20 21:35:13 · 190 阅读 · 0 评论 -
栈的生长方向以及内存存储方式
#include<stdio.h>//1.栈的生长方向void test01(){ int a = 10; //**96 栈底 高地址 int b = 20; //**84 int c = 30; //**72 int d = 40; //**60 栈顶 低地址 printf("%d\n", &a); printf(...翻译 2019-10-20 20:52:48 · 654 阅读 · 0 评论 -
变量的传递
#include<stdio.h>int g_a = 100;//全局区的数据,在main,fun1,fun2都可以使用func2(){}func1(){ int a = 10;//在main函数中不可以使用,在func1和func2中都可以使用 func2();}int main(){ int a = 1000; //在main和func1、func2中都...翻译 2019-10-20 19:54:30 · 145 阅读 · 0 评论 -
宏函数的使用
#include<stdio.h>#define SWAP(a, b, t) { t=a; a=b; b=t; } #define SWAP(a, b, t) t=a; a=b; b=t; #define MYADD(x,y) ((x)+(y))/* 宏函数,要保证运算的完整性 宏函数,在一定程度上比普通函数效率高,普通函数会有入栈和出栈时间上的开销 通常将...翻译 2019-10-20 19:46:44 · 10566 阅读 · 0 评论 -
C语言内存四区模型
0.准备知识最近在重新学习C语言,此篇文章用来重新记录内存四区的学习。变量的概念:既能读又能写的内存对象,称为变量;若一旦初始化后不能修改的对象称为常量变量的本质:变量是内存空间的别名(一个门牌号),可以通过这个门牌找到内存,进而对内存进行读写1.运行之前我们想要执行编写的一段C程序,第一步需要对这个程序进行编译。1)预处理:宏定义展开、头文件展开、条件编译,这里不会...原创 2019-10-20 19:32:48 · 408 阅读 · 0 评论 -
const 修饰的全局变量、局部变量以及字符串常量
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>//1.const修饰的全局变量,即使语法通过,但是运行的时候会受到常量区的保护,运行失败const int a = 10; //const放在常量去,表示该变量不能被修改void...翻译 2019-10-19 21:54:06 · 3057 阅读 · 1 评论 -
static和extend的区别
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>//1.静态变量 staticstatic int a = 10; //特点:只初始化一次,在编译阶段就分配内存,属于内部链接属性,只能在当前文件中使用void test01(){...翻译 2019-10-19 21:36:13 · 696 阅读 · 0 评论 -
堆区的使用
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>int *getSpace(){ int *p = malloc(sizeof(int)*5); if (p == NULL){ return NULL; } for (in...翻译 2019-10-19 21:17:05 · 155 阅读 · 0 评论 -
栈区的使用
#include<stdio.h>#include<stdlib.h>//栈 注意事项:不要返回局部变量的地址int *func(){ int a = 10; return &a;}void test01(){ int *p = func(); //结果已经不重要了,a的内存已经被释放了,没有权限去操作这块内存 printf("a=%d\n",...翻译 2019-10-19 20:51:39 · 146 阅读 · 0 评论 -
变量的修改方式
#include<stdio.h>void test01(){ int a = 10; //直接修改 a = 20; printf("a=%d\n",a); //间接修改 int *p = &a; *p = 100; printf("a=%d\n", a);}//对于自定义数据类型struct Person{ char a; //0-3 int...翻译 2019-10-19 20:40:12 · 273 阅读 · 0 评论 -
sizeof的使用
#include<stdio.h>//1.sizeof本质:是一个操作符,类似+-*/,不是函数void test01(){ //对于数据类型,sizeof必须用();对于变量,可以不加() printf("size of int =%d\n",sizeof(int)); double d = 3.14; printf("size of d=%d\n", sizeof d...翻译 2019-10-19 20:06:52 · 101 阅读 · 0 评论 -
void的使用
#include<stdio.h>//1.void类型是不可以创建变量的void test01(){ //void a = 10;//编译器会报错,不知道给a分配 多少内存空间}//2.可以限定函数返回值void func(){ }void test02(){ func(); //printf("%d\n",func()); }//3.可以限定参数列表i...翻译 2019-10-19 18:31:02 · 341 阅读 · 0 评论 -
typedef的使用
#include<stdio.h>//1.简化结构体关键字struct/* struct Person{ char name[64]; int age;}; typedef struct Person myPerson;*///typedef最主要的用途 给类型起别名//语法:typedef 原名 别名typedef struct Person{ char n...翻译 2019-10-18 22:40:34 · 138 阅读 · 0 评论