
C语言学习笔记
文章平均质量分 57
有关 C 语言的知识点梳理总结
暖仔会飞
这个作者很懒,什么都没留下…
展开
-
C语言学习之:文件读写 fread 和 fgets 的区别;如何用 fread + fwrite完成图片的复制
用 fread 和 fgets 读文件参考:https://www.cnblogs.com/edan/p/10070913.html#:~:text=%E4%B8%A4%E4%B8%AA%E5%87%BD%E6%95%B0%E9%83%BD%E6%98%AF,%E5%AE%8C%E6%89%80%E6%9C%89%E7%9A%84%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E3%80%82https://blog.youkuaiyun.com/weixin_40763897/arti原创 2022-05-19 17:07:43 · 1213 阅读 · 0 评论 -
Clion 使用问题解决:更改默认工作目录
问题引入使用 Clion 编写 C 代码的时候,使用 getcwd 返回的默认工作路径是在 cmake-build-debug 下面;这导致我的很多行为特别不方便,因此我解决了这个问题:在 CMakeList.txt 里加上这句话工作目录就到这里了:当然你也可以在这里加上自己想要的目录,就会自动调整过去了:...原创 2022-05-15 00:05:29 · 4920 阅读 · 0 评论 -
C语言学习之:关于链表创建的时候为什么要设置指向头结点的指针的分析;指向头结点的指针为什么很重要
文章目录代码分析代码//// Created by qpn on 2022/3/25.//#include <malloc.h>#include "stdio.h"/* * 构建一个链表的结构体 */typedef struct Link { int ele; struct Link *next;} link;link *initLink(){ /* * 创建一个头结点 */ link *p = (link*)mal原创 2022-03-25 11:37:06 · 2590 阅读 · 0 评论 -
C语言学习之:并发编程(多线程编程)资源整理 pthread
https://stackoverflow.com/questions/1662909/undefined-reference-to-pthread-create-in-linux#comment7620262_1662909https://stackoverflow.com/questions/35932258/how-to-install-libpthread-a-in-ubuntu-14-04https://askubuntu.com/questions/1059726/error-sudo-un原创 2022-03-15 00:30:40 · 1505 阅读 · 0 评论 -
C 语言学习之:问题解决之—多线程编程代码运行时报错:undefined reference to pthread_create;undefined reference to pthread_join
文章目录问题描述问题描述选了一计算机系统的课,课程要求在 linux 系统上运行一些 C 的代码,学到多线程的地方,在 linux 上安装了一个集成开发环境:Jetbrain 公司的 Clion,但是编译线程程序的时候无论如何也无法编译成功,报的错误:...原创 2022-03-14 17:53:45 · 3976 阅读 · 0 评论 -
C语言学习之:指针类型的意义
文章目录解引用操作的时候,访问空间的大小决定指针向后移动一个单位的距离先看这段代码int main() { int a = 123; int* p = &a; char* p_ = &a; printf("%p\n", p); printf("%p\n", p_);}可以看到无论是用 int 类型的指针变量或是 char 类型的指针变量似乎都能接受一个地址,那么指针变量的类型有什么意义呢?解引用操作的时候,访问空间的大小首先我们设一个 int 类型原创 2022-03-07 01:08:55 · 499 阅读 · 0 评论 -
C语言学习之:野指针(非法的指针情况);如何避免野指针的情况
野指针产生的情景指针变量未初始化当一个变量未进行初始化,系统会给一个初始的随机值;同样的当一个指针变量没有进行初始化的时候,系统也会随机分配一个地址值给这个未初始化的指针int main() {int* p;printf("%p", p);}指针越界指针越界也会造成野指针的问题# 明明 arr 的地址空间规定了 10 个位置,# 当指针超过这些位置的时候,就产生了野指针int main() { int arr[10] = { 0 }; int* p = arr;原创 2022-03-07 00:47:38 · 1697 阅读 · 0 评论 -
C语言学习之:指针内容总结
原创 2020-12-22 21:27:57 · 240 阅读 · 0 评论 -
C语言学习之:指针数组 和 指向指针的指针
指针数组指针数组,顾名思义,还是一个数组,只不过这个数组里面的所有的元素都是指针变量。定义的方式 指针类型 *数组 ---> int *name[4]尤其是对于多个字符串放在一个数组里面,因为字符串本身可以看做地址,因此可以通过指针数组来索引每一个字符串。#include<stdio.h>void main() { int arr[4] = { 1,2,3,4 }; int* array[4] = { &arr[0],&arr[1],&arr原创 2020-12-22 21:01:31 · 485 阅读 · 0 评论 -
C语言学习之:指向函数的指针和返回指针值的函数
文章目录指向函数的指针返回指针值的函数指向函数的指针定义实现功能的不同的函数找出最大值的函数 max,找出最小值的函数 min,相加的函数 add,定义一个函数 process 来有效结合这三个函数,通过指向函数的指针来完成这个步骤指向函数的指针用如下格式来定义 指针类型 (*指针变量名)()--->int(*p)() 这个指针的类型适合指针指向的函数的返回值类型保持一致的,例如 max 函数的返回值类型是 int,因此指向 max 函数的指针的类型也是 int在调用 proc原创 2020-12-22 19:16:01 · 545 阅读 · 1 评论 -
C语言学习之:指针与字符串
1. 字符串的定义使用指针和数组两种方式定义字符串#include<stdio.h>void main() {char string[] = "i love china!";char* string_ = "i love china!";printf("%s\n", string);printf("%s", string_);}从汇编的角度来看这两种定义方式的区别使用指针来定义字符串效率更高指针定义的字符串在内存中开辟的空间位于 常量存储区,不能被改变原创 2020-12-22 15:50:31 · 778 阅读 · 0 评论 -
C语言学习之:一位数组指针与二维数组指针的定义与使用
文章目录一维数组指针和二维数组指针的定义一维数组指针和二维数组指针用于索引数组元素一维数组指针和二维数组指针的可视化解读一维数组指针和二维数组指针的定义一维数组指针的定义就是普通指针的定义 指针变量类型 *指针变量名称 --> int *p二维数组指针变量的定义略微复杂:指针变量类型 *指针变量名称[二维数组的列数] --> int(*p2)[3]一维数组指针和二维数组指针用于索引数组元素一维数组指针和二维数组指针的可视化解读...原创 2020-12-22 13:02:23 · 1586 阅读 · 0 评论 -
C语言学习之:一维数组、二维数组的取值和取地址问题
文章目录1. 一位数组的取值操作与取地址操作2. 二维数组的取值操作与取地址操作3. 一维数组与二维数组的共同点和差别4. 深入讨论 `*a` 的问题1. 一位数组的取值操作与取地址操作假设现在有一个一位数组 a = [1,2,3,4,5]因为 a 是一个数组,而在 C 语言中规定,数组变量的名称代表的就是一个数组的地址值,因此,打印 a 即打印 a 的地址值因为 a 本身就是个地址,因此对它取地址其实得到的还是数组 a 的地址,因此结果也相同一个数组的地址值本身也是它第一个元素的地址值,因此第原创 2020-12-21 22:36:24 · 13121 阅读 · 3 评论 -
C语言学习之:初探指针
通俗地理解指针指针就是地址。指针变量是一个变量,这个变量专门存放地址(指针),因此指针变量是专门存放指针的变量。* 的作用不能混淆,用到它的地方有两个:① 用在定义指针变量的时候, int *p,这个时候 p 是一个指针变量;后面通过程序对 p 进行操作的时候不必加 *,与使用普通的变量一样;② 在取指针变量值的时候。通过直接打印变量 p, printf (p) 打印的是一个地址值,而如果通过 printf(*p) 那么打印的是这个地址里面存放的值。下面用程序来示意:#include<原创 2020-12-21 20:51:16 · 191 阅读 · 0 评论 -
C语言学习之:递归算法进阶--汉诺塔问题(hanoi)
文章目录问题描述问题分析递归代码实现问题描述问题分析如果是初次接触类似的问题,乍看之下肯定会感觉无从下手。要把64个圆盘从a柱子移动到c柱子上,第一步应该怎么做?虽然可以肯定,第一步唯一的选择是移动 a 最上面的那个圆盘,但是应该将其移到 b 还是 c 呢?很难确定。因为接下来的第二步、第三步……直到最后一步,看起来都是很难确定的。能立即确定的是最后一步:最后一步的盘子肯定也是 a 最上面那个圆盘,并且是由 a 或 b 移动到 c——此前已经将 63 个圆盘移动到了 c 上。也许你会说,管他原创 2020-12-20 16:11:26 · 601 阅读 · 1 评论 -
C语言学习之:递归算法初探:阶乘 、斐波那契数列、1-100的和、数组的和、求最大值
文章目录题目描述1. 阶乘2. 斐波那契数列3. 数字求和4. 数组求和5. 数组中的最大值比较写在后面题目描述1. 阶乘使用递归算法求出 5 的阶乘的值#include<stdio.h>int factorial(int a) { int temp = a; if (a < 0) { printf("error"); } else if(a==0 || a==1) { temp = 1; return temp; } else { temp原创 2020-12-20 11:32:19 · 282 阅读 · 1 评论 -
C语言学习之:visual studio 中 C 语言高效的注释方法
visual studio 自带的注释方法通过 // 注释通过快捷键 ctrl + k + cc 语言的高效注释方法通过 #if 0 #endif //0 的语句,可以避免注释嵌套而出错的问题#if 0#endif // 0原创 2020-12-19 17:42:36 · 998 阅读 · 1 评论 -
C语言学习之:限定键盘输入数据的有效方法
限定输入的方式#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>void main() { int a; printf("请输入一个数字:\n"); while (scanf("%d", &a) != 1) { getchar(); printf("输入内容非法,请重新输入!\n 重新输入的内容是:");} printf("%d",a);}scanf 的返回值是 int 类型的数据,如果 scanf原创 2020-12-19 17:39:16 · 8101 阅读 · 4 评论 -
C语言学习之:冒泡法,二分查找法
冒泡法#include <stdio.h>void main() { int a[] = { 9,1,4,3,8,5,6,7 }; int n = sizeof(a) / sizeof(int); int big_cir_times = n - 1; // 外层循环控制比较的趟数,n个数,就 n-1 趟 for (int i = 0; i < big_cir_times; i++) { /// 内层循环控制每趟中的交换的次数 for (int j = 0; j原创 2020-12-19 17:24:02 · 465 阅读 · 1 评论 -
C语言学习之:获取二维数组的某一行的数据
#include<stdio.h>void main() { int a[2][3] = { {1,2,3},{4,5,6} }; for (int i = 0; i < 3; i++) { printf("%d ", a[1][i]); }}原创 2020-12-19 14:54:40 · 6310 阅读 · 1 评论 -
C语言学习之:(11)define 宏定义常量、宏定义表达式
define宏定义常量宏定义常量是不可以被改变的量define宏定义表达式define宏定义函数原创 2020-10-26 14:18:41 · 1846 阅读 · 0 评论 -
C语言学习之:(10)字符串
文章目录1. 字符串的初始化方法2. 数组定义的字符串和字符串常量的区别3. 打印字符串数组和字符串常量打印字符数组打印字符串常量1. 字符串的初始化方法字符串是一种特殊的 char 类型,相当于一组 char 类型的数据后面加了一个 ‘\0’第四种定义方式使用了指针 * ,这种定义的方式定义的是 “字符串常量”。2. 数组定义的字符串和字符串常量的区别在本文的情境下:字符串常量占的空间为 4 个字节,而数组定义的字符串都是 6 个字节字符串常量与指针关系密切,因为字符串常量的原创 2020-10-26 10:29:01 · 604 阅读 · 1 评论 -
C语言学习之:(9)占位符相关操作
1. C语言常用占位符%d 十进制数%f 浮点数%o 八进制数%x 十六进制数%X 十六进制数%s 读入一个字符串,遇空格、制表符或换行符结束。%p 指针%c 字符%u 读入一个无符号十进制整数原创 2020-10-24 14:40:20 · 392 阅读 · 0 评论 -
C语言学习之:(8)C语言的二维数组
二维数组的定义二维数组的应用定义一个数组,存储五名学生的三门成绩求出每名学生的总成绩 、平均成绩求出每门学科的总成绩,平均成绩C语言解法#define _CRT_SECURE_NO_WARNINGS#define ROW 2#define COL 3#include<stdio.h>// 学生的平均成绩// 成绩输入int arr[ROW][COL];void main(){ for (int i = 0; i < ROW; i++) { f原创 2020-10-23 22:25:02 · 510 阅读 · 0 评论 -
C语言学习之:(7)一维数组:定义方式、空间占用、数组逆置算法、冒泡排序法
文章目录1. 数组的定义方式方式1:方式2:方式3:方式4:2. 数组的空间占用3. 通过 scanf 来初始化数组4. 数组逆置C语言解法python解法5. 冒泡排序法C语言解法python解法:1. 数组的定义方式方式1:类型名称空间大小(一共十个单元,每个单元都是 int 类型,所以每个单元是 4 字节)具体的值方式2:int arr[] = {1,2,3,4,5}不给其指定分配空间的大小,自适应空间分配方式3:int arr[10] = {1,2,3,4,5};原创 2020-10-23 21:17:17 · 932 阅读 · 0 评论 -
C语言学习之:(6)跳转语句 break,continue,goto
文章目录breakcontinuegoto1. goto在上下语句之间的跳转2. goto 语句在两个循环体之间的跳转3. goto 写死循环的方式break在 switch 条件语句和循环语句中使用 break:在 switch 语句中用于终止某个 case 并跳出 switch 结构在循环语句中,作用是跳出 “当前” 循环语句,执行后续代码在嵌套循环语句中,作用是跳出最近的循环语句,执行后续代码continue在循环语句中,如果希望立即终止本次循环,并执行下一次循环,原创 2020-10-23 16:05:41 · 814 阅读 · 0 评论 -
C语言学习之:(5)用 c和python分别写九九乘法表
文章目录九九乘法表C语言python九九乘法表C语言python注意:因为python每次运行完之后都会自动换行(默认 end=‘\n’),所以这里用 end=‘ ’ 来结尾,就可以防止自动换行的情况原创 2020-10-23 14:47:23 · 193 阅读 · 0 评论 -
C语言学习之:(4)python 和 c 之间for循环的不同
文章目录一般的for循环(只有一个约束条件)多约束的for循环拆分 for 循环用 for 写一个死循环用for循环写一个猜数字游戏1. c 语言产生随机数2. 猜数字游戏一般的for循环(只有一个约束条件)pythonc多约束的for循环c两个约束条件 i j 之间用逗号分隔,而且必须两者同时满足才能继续进行下面的语句,所以上述的代码只执行三次。python 中不存在这种结构。拆分 for 循环上述两种写法是等价的用 for 写一个死循环删除 for 中的判断和原创 2020-10-23 13:23:51 · 4514 阅读 · 0 评论 -
C语言学习之:(3)do while和 while 的区别;通过 c 实现水仙花数
文章目录do whilewhile水仙花数do whilewhile对于上述代码,do while 结构会一直循环下去,因为do 中的代码体会改变 i 的值使其满足 循环的条件,但是 while 语句就会无法进入循环。水仙花数调用数学函数要通过 #include<math.h> 这个头文件来实现...原创 2020-10-23 11:29:43 · 1000 阅读 · 0 评论 -
C语言学习之:(2)python 和 c 的区别:三目运算符,条件判断语句,分支语句
文章目录1. 三目运算符2. 判断语句3. 分支语句4. 循环语句1. 三目运算符pythonc:2. 判断语句python:c:3. 分支语句python:没有 switch 结构语句c:注意:case 的条件只能是单个判断,不能判断范围一定要有 break 来跳出分支,否则会出现分支被击穿的现象4. 循环语句敲 7 游戏:每次遇到 7 的倍数或者带 7 的数字,都要敲桌子python 中的 “与” 用 and 来表示,“或” 用 or 来表示c 中 “与”原创 2020-10-22 22:32:04 · 310 阅读 · 0 评论 -
C语言学习笔记之(1):初探——c与python的不同
文章目录1. python 和 c 的打印过程2. c 定义常数的两种方式3. 导入文件4. 注释方式5. scanf / input1. python 和 c 的打印过程python 中的 print 可以进行运算,而且输出不必要使用占位符python 不需要声明变量类型python 所有的文件互不干扰,每个文件都可以有一个主函数 main,但 c 的所有文件中只能有一个 main 函数2. c 定义常数的两种方式通过 const 关键字或者在代码前面使用 #define 来定义常原创 2020-10-22 20:07:51 · 286 阅读 · 0 评论