C语言
文章平均质量分 87
日行一步
这个作者很懒,什么都没留下…
展开
-
C/C++中语言中static关键字用法详解
static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护。但是对于c语言初学者,static由于使用灵活,并不容易掌握。本文就static在c语言中的应用进行总结,供参考使用。错漏之处,请不吝指正。在程序中使用static变量1. 局部变量普通局部变量是再熟悉不过的变量了,在任何一个函数内部定义的变量(不加static修饰符)都属于这个范畴。编译器...转载 2019-10-07 10:07:00 · 166 阅读 · 0 评论 -
C语言中volatile关键字的作用
文章目录一.前言二.volatile详解:一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:将内存变量缓存到寄存器;调整指令顺序充分利用CPU指令流水线,常见的是重转载 2021-12-09 07:00:01 · 6869 阅读 · 0 评论 -
C语言中const关键字的用法
文章目录前言一、修饰局部变量二、常量指针与指针常量三、修饰函数的参数四、修饰函数的返回值五、修饰全局变量前言关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const呢,我想事物的存在一定有它自己的道理,所以说const的存在一定有它的合理性,与预编译指令相比,const修饰符有以下的优点:1、预编译指令只是对值进行简单的替换,不能进行类型检查2、可以保护被修饰的东西,防止意外修改,增强程序的健转载 2021-12-09 07:25:27 · 336 阅读 · 0 评论 -
常用的七种排序算法【C语言】
常用的七种排序算法分别是直接插入法、折半插入法、冒泡排序、快速排序、简单排序、堆排序、并归排序。#include <stdio.h>#include <string.h>#define MAXSIZE 20 // 顺序表最大长度typedef int KeyType; // 定义关键字为整数类型ty...原创 2019-11-09 08:14:58 · 318 阅读 · 0 评论 -
C语言练习笔记 ~ typedef
typedef 是一种高级数据特性,它能使某一类型创建自己的名字。它主要的目的也是简化我们的代码和语法,可以大大提高代码的可维护性。特点:1、typedef 与 #define 不同,typedef 仅限于数据类型,而不是能是表达式或具体的值。2、typedef 是编译器处理的,而不是预编译指令。3、typedef 比 #define 更灵活。示例#include <stdio...原创 2019-11-05 20:35:21 · 194 阅读 · 0 评论 -
C语言练习笔记 ~ 枚举类型
文章目录例1例2 改变默认值define 一次只能定义1个常量,如果需要同时定义多个常量,则需要使用枚举。例1#include <stdio.h>#include <string.h>#include <stdlib.h>#pragma warning(disable:4996)struct man{ char name[20]; ...原创 2019-11-05 19:59:17 · 387 阅读 · 0 评论 -
C语言练习笔记 ~ 联合体(共用体)
例1原创 2019-11-05 10:15:11 · 319 阅读 · 0 评论 -
C语言练习笔记 ~结构体10 ~ 结构体变量作为函数的参数
例1#include <stdio.h>#include <string.h>#include <stdlib.h>#pragma warning(disable:4996)struct student { char name[20]; int age;};void set_student(struct student *...原创 2019-11-04 21:27:59 · 165 阅读 · 0 评论 -
C语言练习笔记 ~结构体9 ~ 堆中创建结构体变量
例1#include <stdio.h>#include <string.h>#include <stdlib.h>#pragma warning(disable:4996)struct student { char name[20]; //没有在内存里,只是在代码中,必须要定义变量之后才进内存 int age;};stru...原创 2019-11-04 20:57:41 · 1303 阅读 · 3 评论 -
C语言练习笔记 ~结构体8 ~ 结构体变量的指针成员(浅拷贝与深拷贝)
文章目录例1 结构体变量为指针例2 结构体变量赋值(浅拷贝)例3 结构体变量赋值(深拷贝)例1 结构体变量为指针#include <stdio.h>#include <string.h>#include <stdlib.h>#pragma warning(disable:4996)struct student { char name...原创 2019-11-04 20:27:56 · 463 阅读 · 2 评论 -
C语言练习笔记 ~结构体7 ~ 指向结构体的指针
通过指针访问结构体成员-> 操作符(*p).a 等同于 p-> a#include <stdio.h>#include <string.h>#pragma warning(disable:4996)struct student { char name[20]; int age;}; int main () { ...原创 2019-10-31 13:02:06 · 188 阅读 · 0 评论 -
C语言练习笔记 ~结构体6 ~ 结构体变量赋值
结构体变量赋值#include <stdio.h>#include <string.h>struct student { char name[20]; int age;}; int main () { struct student st1 = {"abc", 30}; struct student st2; st...原创 2019-10-31 12:47:31 · 254 阅读 · 0 评论 -
C语言练习笔记 ~结构体5 ~ 结构体嵌套
例1#include <stdio.h>#include <string.h>#pragma warning(disable:4996)struct A{ char a1; };struct B{ struct A a; int a1; }; int main () { struct B b; p...原创 2019-10-25 22:34:21 · 200 阅读 · 0 评论 -
C语言练习笔记 ~结构体4 ~ 结构体数组
cpu 处理 int 的效率是最高的,int 比 char 要多占内存而已。原创 2019-10-25 21:24:17 · 272 阅读 · 0 评论 -
C语言练习笔记 ~结构体3 ~ 结构体的位字段
文章目录结构体的位字段结构体的位字段原创 2019-10-24 16:35:28 · 353 阅读 · 0 评论 -
C语言练习笔记 ~结构体2 ~ 结构体在内存中的对齐说明
文章目录1、结构体变量在内存中的对齐说明例1 ~ 1个char型变量例2 ~ 2个char型变量例3 ~ 1个int型变量例4 ~ 1个char型变量和1个int型变量例5 ~ 3个char型变量和1个int型变量例6 ~ 5个char型变量和1个int型变量例7 ~ 1个char型变量、1个short型变量和1个int型变量例8 ~ 2个char型变量、1个short型变量和1个int型变量2、...原创 2019-10-23 21:47:49 · 201 阅读 · 0 评论 -
C语言练习笔记 ~结构体1 ~ 定义及初始化
文章目录1、结构体的定义及初始化例1 先定义结构体,再初始化例2 定义结构体的同时,初始化全部成员变量例3 只初始化一个成员例4 初始化全为零1、结构体的定义及初始化例1 先定义结构体,再初始化#include <stdio.h>#include <stdlib.h>#include <string.h>#pragma warning(disab...原创 2019-10-16 11:30:57 · 214 阅读 · 0 评论 -
C语言练习笔记 ~ 内存管理8 ~ 操作系统分配内存的最小说明
示例#include <stdio.h>#include <stdlib.h>#pragma warning(disable:4996) int main () { while(1) { char *s = malloc(1024); getchar();//执行到这里暂停一下 } return ...原创 2019-10-16 09:25:50 · 144 阅读 · 0 评论 -
C语言练习笔记 ~ 内存管理7 ~ 通过指针形参分配堆内存
文章目录示例1:示例2:(错误代码)示例3:这个地方有点绕,重点复习。示例1:#include <stdio.h>#include <stdlib.h>#include <string.h>void test(char *s){ strcpy(s, "hello");} int main () { char *...原创 2019-10-16 08:29:08 · 161 阅读 · 0 评论 -
C语言练习笔记 ~ 内存管理6 ~ calloc 与 realloc 的使用
malloc的参数是指定分配的大小,单位:字节;calloc的第一个参数是指定单位的数量,第二个参数是指定一个单位的大小;用malloc分配10个intint *p = malloc(10 * sizeof(int));用calloc分配10个intint *p = calloc(10, sizeof(int));以上两种写法分配堆内存的大小是一样的,区别是malloc只负责分配,不负...原创 2019-10-11 20:31:24 · 149 阅读 · 0 评论 -
C语言练习笔记 ~ 内存管理5 ~ 堆、栈和内存映射
每个线程都有自己专属的栈(stack),先进后出(LIFO)栈的最大尺寸固定,超出则引起栈溢出变量离开作用范围后,栈上的数据会自动释放堆上内存必须手工释放(C/C++),除非语言执行环境支持GC如果明确知道数据占用多少内存或者数据很小就用栈。如果是需要大量内存或者不确定需要多少内存就用堆。下面是一个示例:栈的实现原理int abc(int a, int b) //c语言的形参...原创 2019-10-11 14:22:37 · 375 阅读 · 0 评论 -
C语言练习笔记 ~ 内存管理4 ~ 通过堆空间实现动态大小变化的字符数组
通过堆空间实现动态大小变化的字符数组示例:#include <stdio.h>#include <stdlib.h>#include <string.h> int main () { char a[] = "hellofsjfhjfhskgt"; char b[] = "abcdefgsdfkggkgkshgthdn";...原创 2019-10-11 10:53:35 · 112 阅读 · 0 评论 -
C语言练习笔记 ~ 内存管理3 ~ 内存四区
1、代码区代码区 code ,程序被操作系统加载到内存的时候,所有的可执行代码加献到代码区,也叫代码段,这块内存是不可以在运行期间修改的。代码区中所有的内容在程序加载到内存的时候就确定了,运行期间不可以修改,只可以执行。2、静态区静态区是程序加就到内存的时候就确定了,程序退出的时候从内存消失,所有的全局变量和静态变量在程序运行期间都占用内存。 所有的全局变量以及程序中的静态变量都存储到静...原创 2019-10-11 10:30:38 · 262 阅读 · 0 评论 -
C语言练习笔记 ~ 内存管理3 ~ 全局变量与声明变量
1、全局变量全局变量的存储方式和静态变量相同,但可以被多个文件访问,定义在代码块之外的变量就是全局变量,也是文件变量。全局变量即使不在同一个文件里面,也不能重名。2、声明变量 extern调用其他文件定义的全局变量或函数时,就要用到声明变量。示例如下:#include <stdio.h> extern int a =0; //声明了一个变量aextern void t...原创 2019-10-10 21:33:00 · 180 阅读 · 0 评论 -
C语言练习笔记 ~ 内存管理2 ~ 自动变量与静态变量
1、自动变量 auto{}内部定义的变量都是auto变量。auto变量自动出现在内存里。例1#include <stdio.h>void test(){ auto int a =0; //auto 属于自动变量,写不写没关系 a++; printf("a=%d\n",a);}int main () { register int a...原创 2019-10-10 20:59:29 · 154 阅读 · 0 评论 -
C语言练习笔记 ~ 内存管理1 ~ 变量作用域
一个C语言变量的作用域可以是代码块作用域、函数作用域或者文件作用域。代码块是{ }之间的一段代码。同一个作用域不能有同名变量,但不同作用域变量名称可以相同。例1#include <stdio.h>int a =2; //文件作用域int main () { int a = 0; //函数作用域 { int a = 1; //代码块作用域...原创 2019-10-01 21:28:54 · 178 阅读 · 0 评论 -
C语言~冒泡排序
1、冒泡排序思路(从小往大排列):从第一个开始,相邻两个数依次比较,大的放后面,一次循环下来,最大的放到最后一个;然后开始第二次循环,这一次就不用管最后一个元素了;一直循环下去,直到所有元素排列完成。2、代码实现#include <stdio.h>int main(){ int a[] = { 12,18,5, 256, 31, 2}; int i, j; int m...原创 2019-06-23 20:52:31 · 150 阅读 · 0 评论 -
求100到999之间所有的水仙花数
1、水仙花数是什么?一个数百位的立方 + 十位的立方 + 个位的立方 = 这个数本身例如:一个数百位的立方 + 十位的立方 + 个位的立方 = 这个数本身371就是一个水仙花数3 * 3 * 3 + 7 * 7 * 7 + 1 * 1 * 1 = 3712、代码实现#include <stdio.h>#include <stdlib.h>int main...原创 2019-06-29 18:52:09 · 26111 阅读 · 0 评论 -
C语言~数组
1、数组逆置将一个数组倒序排列#include <stdio.h>int main(){ int a[] = { 32, 654, 31, 75, 15, 984, 19, 33, 77, 22 ,736,11}; //两个元素交换的思路 //int tmp = a[0]; //a[0] = a[9]; //a[9] = tmp; int min = 0;//数...原创 2019-06-29 22:28:13 · 267 阅读 · 0 评论 -
C语言~字符串
1、去掉字符串结尾的空格思路:要去掉字符串最右面的空格,而不能去掉字符串中间的空格不能从前往后数,从后往前数,遇到不是空格的字符就把这个字符的下一个字符设置为0#include <stdio.h>int main(){ char a[100] = "hello abc world "; int index = 0...原创 2019-06-30 11:28:26 · 634 阅读 · 0 评论 -
C语言~指针
一个变量的地址称为该变量的指针。如果有一个变量专门用来存放另一个变量的地址,它就是指针变量。1、指针基础示例从键盘中输入两个数,利用指针的方法将这两个数输出#include<stdio.h>int main(){ int a, b; int *ipointer1,*ipointer2; /*声明两个指针变量*/ scanf("%d,%d",&a...原创 2019-08-21 18:59:33 · 1501 阅读 · 0 评论 -
C语言~结构体
为了使规模较大的程序更便于修改和使用,常常将结构体类型的声明放在一个头文件中,这样在其他源文件中如果需要使用该结构体类型则可以用 #include 命令将该头文件包含到源文件中。1、结构体变量引用#include<stdio.h>struct Product /*声明结构*/{ char cName[10]; /*产品的名称*/ char cShape[20];...原创 2019-08-22 11:31:43 · 231 阅读 · 0 评论 -
C语言~共用体
共用体看起来很像结构体,只不过关键字由 struc t变成了 union。共用体和结构体的区别在于:结构体定义了一个由多个数据成员组成的特殊类型,而共用体定义了一块为所有数据成员共享的内存。1、使用共用体变量#include<stdio.h>union DataUnion /*声明共用体类型*/{ int iInt; /*成员变量*/ char cChar; ...原创 2019-08-22 15:19:08 · 248 阅读 · 0 评论 -
C语言~位运算
C语言既具有高级语言的特点,又具有低级语言的功能,C语言和其他语言的区别是完全支持按位运算,而且也能像汇编语言一样用来编写系统程序。1、位运算符2、“与”运算符按位“与”运算符&是双目运算符,功能是使参与运算的两数各对应的二进位相“与”。只有对应的两个二进位均为1时,结果才为1,否则为0。按位“与”的一个用途就是清零,要将原数中为1的位置为0,只需使与其进行“与”操作的数所对应的...原创 2019-08-25 09:19:14 · 1438 阅读 · 0 评论 -
C语言~链表
有一种存储方式,其存储元素的个数是不受限定的,当进行添加元素时存储的个数就会随之改变,这种存储方式就是链表。链表是一种常见的数据结构。在链表中每一个元素包括数据部分和指针部分。数据部分用来存放元素所包含的数据,而指针部分用来指向下一个元素。最后一个元素的指针指向NULL,表示指向的地址为空。注意:在链表这种数据结构中,必须利用指针才能实现,因此链表中的节点应该包含一个指针变量来保存下一个节点的...原创 2019-08-25 15:08:49 · 285 阅读 · 0 评论 -
C语言~链表的相关操作
1、链表的插入操作链表的插入操作可以在链表的头节点位置进行,也可以在某个节点的位置进行,或者可以像创建结构时在链表的后面添加节点。这3种插入操作的思路都是一样的。 下面主要介绍第一种插入方式,在链表的头节点位置插入节点。设计一个函数用来向链表中添加节点:struct Student* Insert(struct Student* pHead){ struct Student* pN...原创 2019-08-25 16:01:09 · 271 阅读 · 0 评论 -
C语言~文件
所有文件都通过流进行输入、输出操作。与文本流和二进制流对应,文件可以分为文本文件和二进制文件两大类。 1、文本文件,也称为ASCII文件。这种文件在保存时,每个字符对应一个字节,用于存放对应的ASCII码。 2、二进制文件,不是保存ASCII码,而是按二进制的编码方式来保存文件内容。1、文件基本操作1.1、文件指针文件指针是一个指向文件有关信息的指针,这些信息包括文件名、状态和当前位...原创 2019-10-03 23:45:24 · 131 阅读 · 0 评论 -
C语言学习笔记1
1、假如我国国民生产总值的年增长率为10%,计算10年后我国国民生产总值与现在相比增长多少百分比?思路:计算公式为:r为年增长率,n为年数,p为与现在相比的倍数。可以pow函数求y的x次方的值,调用pow函数的具体形式是pow(x,y)。在使用pow函数时需要在程序开头用#include指令将&lt;math.h&gt;头文件包含到本程序模块中。具体实现代码如下图所示:#include&l...原创 2019-06-30 11:29:17 · 975 阅读 · 0 评论 -
C语言练习笔记~指针1
1、练习定义指针#include <stdio.h>int main (void){ int *p; //定义了一个可以执行的int类型地址的指针变量,名字叫p int a; //定义了一个int型的变量,名字叫a a = 1; p= &a; // 把a的内存地址赋值给P printf("%p\n",p); return 0;}...原创 2019-09-20 21:39:25 · 283 阅读 · 0 评论 -
C语言练习笔记~指针2~指针常量与常量指针
指针常量与常量指针#include <stdio.h>int main (void){ int a= 0; const int *p = &a; //p可以指向int类型符的地址,但不可以用*p的方式修改这个内存的值 //*p = 10; //不可以用*p的方式修改这个内存的值 a = 10; // 但可以通过a自己修改 printf("a=%d\n",...原创 2019-09-22 10:08:46 · 173 阅读 · 0 评论