![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言学习
C语言学习
硕~
我是一只大菜坤。
展开
-
C语言:位运算常用函数实现
文章目录一、位运算反转二、三、一、位运算反转如图:将该二进制数进行反转。解决代码://位运算反转unsigned int Revers_bit(unsigned int n){ unsigned int m = 0; for (int i=0; i<32; i++) { if ((n&1) == 1)//判断是否为1 { m |= (1<&l...原创 2020-03-04 12:03:58 · 2104 阅读 · 0 评论 -
C语言详解文件操作(二):文件读写注意事项、配置文件读写、文件加密与解密
文章目录一、文件读写注意事项二、文件加密与解密三、配置文件读写一、文件读写注意事项注意事项1:feof产生的滞后性问题(按照字符方式读取时出现的问题):feof有滞后性,会多读一个EOF(文件结尾标志),导致输出结果多一个空格一样的东西。先来看如下一个例子,我们手动添加一个text.txt文档输入aaaaaa,对其读取。void test(){ FILE* file = fopen("...原创 2020-02-20 11:53:45 · 1484 阅读 · 0 评论 -
C语言详解文件操作(一):文件操作基础概念、按照字符、按照行块、按照格式化和随机位置读写文件
文章目录一、文件操作基础概念二、文件读写:按照字符方式读写三、文件读写:按行和块读写四、文件读写:格式化和随机位置一、文件操作基础概念C语言中的文件操作的好处: 一个文件通常是再磁盘上一段命名的存储区,但是对于操作系统来说,文件就会复杂一些。例如,一个大文件可以存储在一些分散的区段中,或者还会包含一些操作系统可以确定其文件...原创 2020-02-19 16:17:05 · 1040 阅读 · 0 评论 -
C语言:结构体基本使用、结构体常见赋值问题及解决、结构体偏移量、内存对齐问题、结构体与一级二级指针嵌套
文章可能比较长,如果想仔细了解结构体知识的话请大佬们耐心看完。文章目录一、结构体基本使用二、结构体常见赋值问题及解决三、结构体与一级指针嵌套四、结构体与二级指针嵌套五、结构体偏移量六、内存对齐问题一、结构体基本使用基本规则与使用方法:1.正常结构体定义时不能赋初值;struct Person{ char name[64]; //int age = 50;//定义时不能赋初值,只有使...原创 2020-02-18 22:00:04 · 8878 阅读 · 1 评论 -
C语言:一维数组名称含义、二维数组名称含义、数组指针、选择排序实现
文章目录一、一维数组名称含义二、数组指针三、二维数组名称含义四、选择排序五、指针数组排序一、一维数组名称含义一维数组名称含义:1.除了两种特殊情况,一维数组名称都是指向数组首元素地址的指针。特殊情况1:对数组的名称进行sizeof:计算的是整个数组的大小。void test(){ int arr[5] = {1,2,3,4,5}; //对一维数组名称进行sizeof(); pri...原创 2020-02-18 10:52:03 · 1399 阅读 · 0 评论 -
C语言:位运算、移位运算、类型转换详解、多种位运算实例分析
文章目录一、位运算符1.1按位取反1.2按位与1.3按位或1.4按位异或二、移位运算符2.1左移运算符2.2右移运算符三、类型转换详解四、详解释多种位运算实例分析一、位运算符1.1按位取反按位取反~:作用是按位将0变成1,1变成0;如:二进制10011010取反后~(10011010)——> 01100101//原码实例1: 先按位取反,但是在计算机中存储需要将原码按照补码方式...原创 2020-02-17 20:13:40 · 6405 阅读 · 3 评论 -
C语言:指针易错点、二级指针简单理解、二级指针做函数参数的输入输出特性、二级指针进行文件读写
文章目录一、指针易错点二、二级指针做函数参数的输入特性三、二级指针做函数参数的输出特性一、指针易错点1.越界问题当我们写出下列代码时,编译器便自动给我们报错。原因是buf只有3个字符,但"abc"其中包含’\0’为4个字符,赋值时出现越界问题编译器自动报错。void test(){ char buf[3] = "abc"; printf("%s\n",buf);}2.指针叠加会...原创 2020-02-16 21:14:14 · 730 阅读 · 4 评论 -
C语言:查找子串问题(strstr函数自己实现)
文章目录一、系统提供的函数:strstr二、自己实现strstr函数一、系统提供的函数:strstr系统提供的查找子串为:strstr。:在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。函数声明:char *strstr(const char *haystack, const char *needle)参数:haystack:要被检索的...原创 2020-02-15 20:05:27 · 16104 阅读 · 2 评论 -
C语言:字符串的拷贝与反转、sprintf格式化字符串、calloc和realloc的使用、ssacnf的使用
文章目录一、字符串的几个特点二、字符串的拷贝和反转三、sprintf格式化字符串四、calloc和realloc的使用五、ssacnf的使用一、字符串的几个特点字符串:字符串或串是由数字、字母、下划线组成的一串字符。一般以0或者’\0’结尾,数字0和’\0’等价。 它是编程语言中表示文本的数据类型。字符串的几个特点:1.字符数组输出的时候,从开始位置直到找到0或’\0’结束; 如下: c...原创 2020-02-15 18:07:11 · 1483 阅读 · 0 评论 -
C指针问题:指针使用、空指针和野指针、指针的步长、指针的间接赋值、指针做函数参数的输入输出特性
文章目录一、指针是什么、为什么使用它?指针是什么?为什么使用指针、什么情况下使用指针?如何使用指针?指针使用时星号* 作用、&作用二、空指针和野指针空指针野指针野指针与空指针区别三、指针的步长四、指针的间接赋值五、指针做函数参数的输入输出特性一、指针是什么、为什么使用它?指针是什么?指针:是一种数据类型,占用内存空间,用来保存内存地址。 例如:在32位平台下,指针大小为4个字节;6...原创 2020-02-14 20:27:10 · 612 阅读 · 0 评论 -
C语言:堆栈使用、栈的生长方向及内存存储方式、static与extern的使用、C语言中的伪常量const、宏函数及函数变量传递
文章目录一、内存分区及栈、堆区的使用内存分区栈区的使用堆区的使用二、static与extern的使用三、C语言中的伪常量const四、宏函数及函数调用模型一、内存分区及栈、堆区的使用内存分区 在程序没有加载到内存之前,可执行程序内部已经分好了3段信息:代码区(text)、数据区(data...原创 2020-02-14 12:11:26 · 894 阅读 · 0 评论 -
C语言:数据类型、typedef使用、void及万能指针使用、变量的修改方式
文章目录一、数据类型数据类型是什么?有什么用?二、数据类型的别名:typedef的使用三、void的使用四、void* 万能指针的使用五、变量的修改方式一、数据类型数据类型是什么?有什么用?什么是数据类型,为什么需要数据类型?数据类型是为了更好的进行内存的管理,让编译器能确定分配多少的内存。例如:我们在进行变量定义的时候,定义了一个整型变量a,将数字10赋给它,开辟了一个4个字节大小的内...原创 2020-02-12 22:08:29 · 712 阅读 · 0 评论 -
C++:x&(x-1)的作用、sizeof计算多种情况详解、宏误区
文章目录一、x &(x-1)作用实例1: 统计1的个数实例2:判断一个数(x)是否是2的n次方二、宏误区一、x &(x-1)作用x &(x-1)作用:将二进制的最后一个1变为0.通过下图观察,我们可以发现规律:实例1: 统计1的个数1.求下面函数的返回值int func(int x) { int countx = 0; while(x) ...原创 2020-02-12 13:35:44 · 1651 阅读 · 0 评论 -
C语言复习2:字符串、时间复杂度、动态内存、高级指针、自定义数据类型、文件操作、可变参数编程
文章目录一、字符串二、时间复杂度与空间复杂度三、动态内存四、高级指针五、自定义数据类型5.1、结构体5.2、联合体5.3、位域、位段的大小六、文件操作七、可变参数编程与补充一、字符串字符串常见问题:strcpy(拷贝)、strlen(求长度)、ctrcmp(比较)、strcat(连接)、atoi、itoastrncpy、strncmp、strncat(更安全)、strstr(字符串查找)等...原创 2020-02-07 16:02:38 · 652 阅读 · 0 评论 -
C语言复习1:常用运算符、位运算与类型转换、前置++与后置++、switch注意点、数组与部分指针问题
文章目录一、逻辑谓词的短路现象二、位运算一、逻辑谓词的短路现象1.逻辑与表达式1&&表达式2,若表达式1为假,则表达式2不执行。 因为表达式1若为假,表达式2无论为真还是假与上表达式1都是假,无意义所以表达式2不执行。2.逻辑或表达式1 || 表达式2,若表达式1为真,则表达式2不执行。...原创 2020-02-06 18:23:22 · 568 阅读 · 0 评论 -
联合体问题
先举一个结构体的例子:struct A//结构体{ int a; char b;};//8该结构体大小为8联合体:存放顺序是所有成员都从低地址开始存放的联合体成员的对齐方式要适合全部的成员union B//联合体,共用体:所有的成员变量共用低地址{ int a; char b;};union X{ int a; struct { short b; ...原创 2019-04-07 16:46:08 · 309 阅读 · 0 评论 -
将n转换成任意进制的字符串问题
问题描述:将n转成radix进制的字符串保存到str中转换范围:2~36进制实现方法:#include <stdio.h>void Reverse_str(char *str){ char *p; char tmp; for(p=str;*p!='\0';p++); p--; while(str < p) { tmp = *str; *st...原创 2019-04-07 16:12:47 · 246 阅读 · 0 评论 -
硬币问题与八皇后问题
问题描述:一个陌生的国度,有5种不同的硬币单位:15、23、29、41和67(分)。寻找所有组成18元8分(即1808分)的可能组合。假定对于所有面值的硬币你都有足够的硬币。解决思路:利用for循环的嵌套来实现,直到凑够1808分,即可列出所有情况实现方法:int Money(){ int count = 0; for(int m1=0;m1<=1808/15;m1++...原创 2019-04-07 15:48:05 · 301 阅读 · 0 评论 -
可变参数编程问题探究
问题引入:为什么要使用可变参数方程问题探究:1.假设要求一个两位数的平均数,仅使用函数实现,两个形参分别传入两个数字,可以很快得出该函数计算两个数字的平均值问题int Avg(int a,int b){ return (a+b)/2;}2.假设要求一个三位数的平均数,仅使用函数实现,三个形参分别传入三个数字,可以很快得出该函数计算三个数字的平均值问题int Avg(int a,i...原创 2019-04-02 23:48:29 · 171 阅读 · 0 评论 -
统计二进制数中1个数三种实现方法,不成对问题及B串是否在A串中问题
1.统计二进制1个数函数功能:统计一个字节数据二进制有几个1实现方法:ch与1若不为0,计数器++,并右移一位进行下一位二进制数字判断int GetBits1(unsigned char ch)//0010 1011->4;1000 0000->1{ int count = 0; while(ch != 0) { if((ch&1) != 0) { ...原创 2019-03-24 19:31:01 · 191 阅读 · 0 评论 -
关于位运算常用的几个函数实现
关于位运算的几个函数实现:1.位反转(32位)函数功能:将n的二进制位模式从左至右变换实现方法:先将n右移的数字与1若不为0,则将tmp或上该位左移31-i位,得到新的二进制数字实现位的反转unsigned int Bit_Reverse(unsigned int n){ unsigned int tmp = 0; for(int i=0;i<32;i++)//从右往左获取二进...原创 2019-03-24 18:18:00 · 991 阅读 · 0 评论 -
位运算符各种操作
基础的几种位运算:10 ->转换为二进制 0000 1010 考试时写4字节11 ->转换为二进制 0000 1011&: 按位与 10&110000 1010|:按位或 10|11 0000 1011|:按位异或10^11 0000 0001~:按位取反10 1111 0101左移:10<<1 000 10100 ...原创 2019-03-21 13:09:32 · 297 阅读 · 0 评论 -
产生可执行的.exe文件与类型转换小结
1.每当我们的代码通过exe文件显示出来的时候,其实经过以下几个流程生成可执行.exe文件:1.预编译(进行字处理)2.编译(进行查错)3.汇编(进行翻译成0或1)4.链接(找符号+启动代码)2.类型转换转换规则:1.默认,数据类型有窄向宽的转2.同级别,无符号比有符号宽3.整型起4.整数默认为int,小数默认为double//窄-》宽:左边补符号位举例:1. ...原创 2019-03-21 12:47:18 · 300 阅读 · 0 评论 -
结构体的大小甄别
//内存对齐:各种数据存放的地址要能够整除该数据本身的字节数例如:char可存放在任意地址,short存放在能被2整除的地址,int存放在能被4整除的地址…如何判断结构体的大小:1、先将每个成员的字节数写出,然后从第二个成员开始,将前面成员的总字节数补齐成当前字节数的倍数2、结构体的总大小,一定要能整除单个成员最大类型的大小例:1.struct A{ int a; int b;...原创 2019-03-13 23:39:50 · 415 阅读 · 0 评论 -
char*str与char str[]比较
//char *str1 = “abcde”;//error,字符串常量//char str2[] = “abcde”;//ok,字符数组//str1[0] = ‘x’;//1 str1[0] = *(str1+0)= *str = ‘x’,编译合法,运行崩溃//str2[0] = ‘x’;//2, okchar *str1的字节为4,为指向str1地址的指针,为4个字节,abced超...原创 2019-03-10 00:08:41 · 2091 阅读 · 1 评论 -
字符串的几个应用函数
1.//将字符串转出数字 “123a45”->123int Myatoi(const char *str){ int tmp = 0; while(isdigit(*str)) { tmp = tmp*10 + (*str - '0'); str++; } return tmp;}2.//将str逆置。“abc”->“cba”void StrRervers...原创 2019-03-09 22:56:39 · 228 阅读 · 0 评论 -
C中的几种逆序情况
1.数字逆序输出://程序目的:逆序输出数字问题//算法:得到个位数字,丢弃个位数字void PrintReverse(int n) { do { printf("%d ",n%10);//得到个位数字 n/=10;//丢弃个位数字 }while(n!=0) ; printf("\n");} 2.数组逆序并输出://逆置函数void Reverse(int...原创 2019-03-09 22:40:52 · 384 阅读 · 0 评论 -
二分查找函数
数组arr中折半查找x,若x不在则返回-1int BinSearch(int *arr,int len,int key){ int low = 0; int high = len-1; int mid; while(low <= high) { mid = (low+high)/2; if(key == arr[mid]) { return mid; }...原创 2019-03-09 22:26:39 · 337 阅读 · 0 评论 -
几种特殊的数据类型的判断
举例:说明:因为()的优先级在*前面,所以有无括号会造成不同的结果1.int (*x)[4]指向数组的指针 数组指针2.int *(x)[4]保存指针的数组 指针数组3.int *f();返回值为指针的函数 指针函数4.int (*f)();指向函数的指针 函数指针例题分析:一维数组:int arr[4]; 数据类型arr: ...原创 2019-03-04 23:42:51 · 516 阅读 · 0 评论 -
字符串函数几种实现方法
说明:因为库函数中有以下函数,所以直接用就好了,但是为了学习,我们还是有必要了解一下函数内部的拷贝函数strcpy的几种实现方法:1.使用数组实现void Mystrcpy1(char *desstr,char *srcstr){ int i; for(i=0;srcstr[i]!='\0';i++)//srcstr[i] == *(srcstr+i) { desstr[i] =...原创 2019-02-27 21:48:46 · 246 阅读 · 0 评论 -
const的使用
const的使用:作用:定义常变量规则如下:1.基本的数据类型对于const是透明的例:int const ca = 0; const int ca = 0;//ca和cb是等价的2.cosnt限定它的直接右边例:const int*cp = &a;cp = 100;(X)因为const限定它的直接右边,int对于const透明,所以cp的值不能被修改int *const ...原创 2019-02-27 21:33:07 · 98 阅读 · 0 评论 -
指针加1存在的可能及指针的算术运算
指针加1的三种可能:1.指针加1,加整个数组(不太现实)2.指针加1,加一个单元格(可以,常用)3.指针加1,加一个字节(太麻烦,但考试常出)举例:小端:低地址,存放小数据假如指针加1代表加一个字节的话:一个单元代表4个字节,首先将第一行每个单元格扩大四倍得到第二行int *p = arr;*p = 10;p++;*p = 20;10的十六进制 ->0x000000...原创 2019-02-24 21:00:05 · 809 阅读 · 0 评论 -
指针简单概念
指针:1.指针就是地址,地址就是指针。指针 == 地址2.如何得到a的地址?取地址符&,&a为获取a的地址3.int *d;//定义整型指针类型变量d,存放整型指针值int *d = &a; &a:整型指针其他类型举例:char *p2 = &b;float *p3 = &c;double *p4 = &d;4.*的作...原创 2019-02-22 22:30:00 · 132 阅读 · 0 评论 -
例题:n进制下,567*456=150216求n
例题:n进制下,567*456=150216,则n的值是( D )A.9 B.10 C.12 D.18解题思路:设两边为(5n^2+6n+7) * (4n^2+5n+6)化简得上式20n4+49n3+88n2+75n+42 = n^5 + 5n^4 + 2n^2 + n + 6(1)两边同时对n求余,得42%n = 6(2)上式两边同除n然后再对n求余(71 + 42...原创 2019-02-22 21:51:14 · 278 阅读 · 0 评论 -
关于C语言数字问题的几个小总结:1.计数 2.顺序输出 3.逆序输出
1.数字计数问题://程序目的:统计n是个几位数字//算法:每次丢弃个位数字(n/=10)程序代码:#include"stdio.h"int GetFigures(int n){ int count = 0; do { count++; n /= 10; }while(n!=0); return count;} int main(){ printf("%...原创 2018-12-02 17:01:53 · 406 阅读 · 0 评论 -
数组逆置并输出
#include&amp;lt;stdio.h&amp;gt;//输出函数void Show(int *arr,int len){for(int i=0;i&amp;lt;len;i++){printf(&quot;%d “,arr[i]);}printf(”\n&quot;);}//逆置函数void Reverse(int arr,int len){int tmp;for原创 2019-02-25 21:46:30 · 585 阅读 · 0 评论