C语言
文章平均质量分 59
C从入门到精通
WhiteShirtI
不管你现在是什么状态 你要记住 生活中的目标就是快乐自由 每天开心
展开
-
C语言 判断一个数是否为素数
除了1和它本身以外,不能被任何整数整除的数,就称为素数,例如17就是素数,因为它不能被2-16的任一整数整除m能被2~m-1之间任一整数整除,其两个因子必有一个小于或者等于√m,另一个大于或者等于√m。例如16能被2、4、8整除,16=2* 8中,2小于4,8大于4。在16=4* 4中4=√16。因此只需要判定 2 ~ 4之间有无因子即可。只需要被2 ~ √m之间的每一个整数去除就可以了代码:bool isPrime(int n){ for (int i = 2; i <= sqrt(原创 2021-05-10 13:06:13 · 741 阅读 · 0 评论 -
C语言 如何判断一个主机是大端还是小端
大端:低地址存高位小端:低地址存低位1、使用联合体最简单的方法,使用联合体。联合体的成员共用同一份空间,在联合体中定义两种不同大小的类型。例如一个int类型和char类型。定义一个int类型的变量i,初始化为1。再定义一个char类型的变量c。i和c共用同一块空间,而且此时的c占用的地址一直都是低地址,如果是小端,i的低位就存储在低地址,这是c的值也会变为1;如果是大端,i的低位就存储在高地址,此时的c的值还是0。通过最后c的值是否为1来判断是大端还是小端int main(){ union原创 2021-04-08 16:23:41 · 428 阅读 · 0 评论 -
C语言中短路求值问题
短路现象(一)以下表达式就是短路现象的其中一种x & y & z;如果x为假,直接返回假;若x为真,则执行y;只有x和y都为真才执行z。例子我们来看以下代码,求想x, y, z和b的值。#include<stdio.h>#include<stdbool.h>int main(){ int x = 0; int y = 1; int z = 2; bool b = x++ && ++y &&原创 2021-01-08 14:01:17 · 1093 阅读 · 0 评论 -
C语言 传值和传指针的区别
转自微信公众号:编程珠玑作者:守望,Linux应用开发者前言我们可能听过C语言中的传值和传指针,在其他语言中,也有传引用一说,那么他们到底有什么区别呢?如果你还不能准确地分辨,就该好好了解一下了。传值我们在初学C语言的时候就被老师教过,下面的方式是无法交换a和b的值的:#include<stdio.h>void swap(int a,int b){ int temp = a; a = b; b = temp; printf("swap a = %d原创 2021-01-06 14:35:43 · 748 阅读 · 1 评论 -
C语言 柔性数组
柔性数组C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做『柔性数组』成员。柔性数组的定义typedef struct Test{ int a; double b; int c; char ch[0]; //柔性数组}Test;柔性数组的特点及如何使用1、结构中的柔性数组成员前面必须至少一个其他成员。2、sizeof 返回的这种结构大小不包括柔性数组的内存。3、包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应原创 2020-11-30 19:30:34 · 459 阅读 · 0 评论 -
C语言 动态开辟内存管理
动态内存管理malloc(用得最多)callocrealloc常见的动态内存错误1、对NULL指针的解引用操作2、对动态开辟空间的越界访问3、对非动态开辟内存使用free释放4、使用free释放一块动态开辟内存的一部分5、对同一块动态内存多次释放6、动态开辟内存忘记释放(内存泄漏)(最容易被遗忘)malloc(用得最多)函数原型:void* malloc (size_t size); 参数为要申请空间的大小,单位为byte.这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。1原创 2020-11-30 12:50:35 · 441 阅读 · 1 评论 -
C语言 位段(位域)总结
位段的定义C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或称“位域”( bit field) 。利用位段能够用较少的位数存储数据。位段的声明1、位段的成员可以是 int unsigned int signed int 或者是 char (属于整形家族)类型2、位段的成员名后边有一个冒号和一个数字。struct A{int _a:2; //开辟一个32个bit位,a占了2个int _b:5; //在a开辟的bit位中占5个bitint _c:10原创 2020-11-26 18:10:27 · 1791 阅读 · 2 评论 -
C语言 字节对齐
什么是字节对齐,为什么要对齐现代计算机中内存空间都是按照BYTE划分的,从理论上讲似乎对任何类型的变量访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排序,而不是顺序的一个接一个的排放,这就是字节对齐。作用和原因各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些框架的CPU在访问一个没有进行对齐的变量时候会发生错误,那么在这种框架下编程必须保证字节对齐,其他平台可能原创 2020-11-26 16:19:19 · 348 阅读 · 0 评论 -
C语言 如何计算结构体的大小
无嵌套结构体的大小计算如何计算结构体的大小?由于存储变量地址对齐的问题,计算结构体大小的3条规则:1、结构体变量的首地址,必须是结构体变量中的“最大基本数据类型成员所占字节数”的整数倍。(对齐)2、结构体变量中的每个成员相对于结构体首地址的偏移量,都是该成员基本数据类型所占字节的整数倍。(对齐)3、结构体变量的总大小,为结构体变量中“最大基本数据类型成员所占字节数”的整数倍(补齐)计算下面结构体的大小struct Test1{ int b; double c; long d;}Te原创 2020-11-24 16:24:36 · 16432 阅读 · 5 评论 -
C语言 顺时针打印矩阵(二维数组)
要求给出二维数组,要求按顺时针打印二维数组。例如给出输入 int arr[][3]{1,2,3,4,5,6,7,8,9}输出 [1,2,3,6,9,8,7,4,5]解题思路顺时针打印矩阵的顺序是 “从左向右、从上向下、从右向左、从下向上” 循环。算法流程1、当 arr为空时,直接返回空列表 [] 即可。2、矩阵 左、右、上、下 四个边界 l , r , t , b ,用于打印的结果列表 val 。3、“从左向右、从上向下、从右向左、从下向上” 四个方向循环,每个方向打印中做以下三件事 (原创 2020-11-17 11:39:12 · 8204 阅读 · 3 评论 -
C语言 模拟实现 strlen strcat strcpy函数
strlen函数库函数strlen:strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)。用法char c[]=“strlen”;int len = strlen©; //输出的是数组c的长度 6strlen和sizeof的区别strlen是一个C语言自带的一个库函数,而sizeof是取字节运算。这是它们本质的区别,在功能方面,strle原创 2020-11-14 19:46:18 · 682 阅读 · 0 评论 -
C语言 关键字const的作用
关键词解释const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一定帮助。定义const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。主要作用1、可以定义const常量,具有不可变性2、便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如: void f(const int原创 2020-11-14 14:28:45 · 8313 阅读 · 0 评论 -
C语言 判断闰年代码实现
闰年的计算方法判断是否为闰年的两个条件1、能被400整除2、能被4整除但不能被100整除代码(C语言)bool Leap_Yaer(int year){ return ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0));}int main(){ int year; printf("请输出你要判断的年份:\n"); scanf("%d", &year); if (Leap_Yaer(year)原创 2020-11-08 21:17:07 · 9983 阅读 · 2 评论 -
C语言 二分法查找数组元素
什么是二分法二分法在数学上的定义:对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。二分法应用算法在用二分法进行查找时,查找对象的数组必须是有序的,即各数组元素的次序是按其值的大小顺序存储的。其基本思想是先确定待查数据的范围(可用 [low,high] 区间表示),然后逐步缩小范围直到找到或找不到该记录为止。具体做法是:先取数组中间位置(mid=(low+hig原创 2020-11-08 20:15:43 · 9142 阅读 · 1 评论