![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
b站比特鹏哥c语言学习笔记
学习笔记
克莱因蓝。
努力努力!
展开
-
调试技巧2
ps:图解里面的栈区与数据结构中的栈没有关系,图解中造成死循环的原因是因为数组地址增长的过程中覆盖到了变量i的地址(高地址)。原创 2022-01-17 20:03:09 · 126 阅读 · 0 评论 -
调试技巧1
Debug(空间较大) 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release (空间较小)称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。注:linux开发环境调试工具是gdb,后期课程会介绍。只有调成Debug才能进行调试...原创 2022-01-10 01:49:25 · 148 阅读 · 0 评论 -
什么是压栈传参?
什么是压栈:内存分为:堆区,静态区,栈区每一个函数调用都会在内存的栈区开辟一块空间例如: 绝大多数编译器传参都是从右到左进行的这就很像压栈操作(紫色部分),所以函数传参也叫做压栈操作。大致如下:当Add函数调用完时,Add函数开辟的空间将归还给操作系统,main函数也是如此。连接上一节:所以当结构体过大时,参数压栈的系统开销比较大,所以会导致性能的下降。所以运用传地址的方式比较好。更多的研究可以搜索《函数栈帧的销毁和创建...原创 2022-01-10 00:02:24 · 2088 阅读 · 0 评论 -
初识结构体
结构是一些值的集合,这些值称为成员变量。结构的个成员可以是不同类型的变量例如描述一个学生:结构体变量访问成员结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数结构体指针访问指向变量的成员有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。例如:...原创 2022-01-09 22:44:12 · 160 阅读 · 0 评论 -
指针与数组
既然可以把数组名当成地址存放到一个指针中,我们使用指针来访问一个就成为可能。例如:结果为:数组地址的等价表现形式(打印结果都为3)有助于指针与数组更深层次的理解...原创 2022-01-07 21:14:37 · 550 阅读 · 0 评论 -
指针初阶2
概念: 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)1. 指针未初始化2. 指针越界访问3. 指针指向的空间释放 这里放在动态内存开辟的时候讲解,这里可以简单提示一下。...原创 2021-12-15 17:32:01 · 827 阅读 · 0 评论 -
指针初阶1
在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向 (points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以 说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址 的内存单元内存指针指针是个变量,存放内存单元的地址(编号)。那对应到代码:总结:指针就是变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。 那这里的问题是:(1)一个小的单元到底是多大...原创 2021-12-08 00:42:14 · 588 阅读 · 0 评论 -
操作符详解3
表达式求值的顺序一部分是由操作符的优先级和结合性决定。 同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。C的整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。整型提升的意义:表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度 一般就是int的字节长度,同时也是CPU的通用寄存器的长度。 因此,即使两个char类型的相加,在CPU执...原创 2021-12-02 22:45:45 · 121 阅读 · 0 评论 -
操作符详解2
+=-=*=/=%=>>=<<=&=|=^=sizeof&:取地址操作符*:解引用操作符(类型):(强制类型转换)#include <stdio.h>void test1(int arr[]){ printf("%d\n", sizeof(arr));//(2)}void test2(char ch[]){ printf("%d...原创 2021-12-01 23:45:24 · 571 阅读 · 0 评论 -
一道面试题
交换两个int变量的值,不能使用第三个变量。即a=3,b=5,交换后a=5,b=3错误做法:使用了第三个变量另一种方法:有缺陷:整形数字有上限,若数值太大就会溢出正确方法:按位异或算法的底层逻辑:所以这个步骤就可以理解为:a = a ^ b ^ b 存放到b中b =a ^ a^ b 存放到a中...原创 2021-12-01 01:34:00 · 80 阅读 · 0 评论 -
操作符详解1
算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用、函数调用和结构成员1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除 法。 3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数例子:左移操作符:左边丢弃,右边补零结果为:4右移操作符:...原创 2021-12-01 01:33:04 · 205 阅读 · 0 评论 -
数组作为函数参数11.15
往往我们在写代码的时候,会将数组作为参数传个函数,比如:我要实现一个冒泡排序(这里要讲算法 思想)函数将一个整形数组排序。 那我们将会这样使用该函数://方法1:#include <stdio.h>void bubble_sort(int arr[])//形参arr本质是指针{//计算数组元素个数 int sz = sizeof(arr)/sizeof(arr[0]);//这样对吗? //是错误的//确定趟数 int i = 0; for(i=0; i&...原创 2021-11-15 13:46:07 · 1148 阅读 · 0 评论 -
二维数组11.13
//数组创建int arr[3][4];//3行4列char arr[3][5];//3行5列double arr[2][4];//2行4列//数组初始化-创建的同时给赋值int arr[3][4] = {1,2,3,4};int arr[3][4] = {{1,2},{4,5}};int arr[][4] = {{2,3},{4,5}};二维数组的使用也是通过下标的方式。#include <stdio.h>int main(){ int...原创 2021-11-13 19:06:51 · 184 阅读 · 0 评论 -
一维数组笔记11.13
注:数组创建, [ ] 中要给一个常量才可以,不能使用变量。type_t arr_name [const_n];//type_t 是指数组的元素类型//const_n 是一个常量表达式,用来指定数组的大小//实例//代码1int arr1[10];//代码2int count = 10;int arr2[count];//数组时候可以正常创建?//代码3char arr3[10];float arr4[1];double arr5[20];int..原创 2021-11-13 15:21:52 · 702 阅读 · 0 评论 -
函数的递归(2)练习+详解
#include<stdio.h>#include<string.h>int my_strlen(char *str){ if (*str != '/0') return 1 + my_strlen(str + 1);//(str+1)是下一个字符的地址 else return 0; }int main(){ char arr[] = "bit";//['b'], ['i'], ['t'], ['/0'] //模拟实现一个strlen函数...原创 2021-11-10 13:29:59 · 277 阅读 · 0 评论 -
函数的递归(1)
#include<stdio.h>void print(unsigned int n){ if (n>9) { print(n / 10); } printf("%d ", n % 10);}int main(){ unsigned int num = 0;//unsigned是无符号整数 scanf("%u", &num);//%u无符号整型//123 //递归,函数调用自己 print(num);//print函数可以打印参数部分数字的每...原创 2021-11-09 01:54:13 · 65 阅读 · 0 评论 -
函数的嵌套调用与链式反应11.7
//strlen函数计算字符串长度的库函数名//<string.h>头文件如果你的程序需要调用:strcmp()、strcpy()、strcat()、strlen()这些函数的时候,在程序的开头#include <stdio.h>下面定义好字符串函数库: #include <string.h>, 这样才能合法的调用。...原创 2021-11-07 21:42:27 · 214 阅读 · 0 评论 -
函数的调用练习(用于熟悉)
//判断1000-2000间是闰年的数//如果判断是闰年,返回1//如果判断不是闰年,返回0int is_leap_year(int n){ if (n % 4 == 0 && n % 100 != 0) return 1; else return 0;}int main(){ int y = 0; for (y = 1000; y <= 2000; y++) { if (is_l...原创 2021-11-05 21:47:29 · 984 阅读 · 0 评论 -
2021-10-31学习笔记
初识指针原创 2021-10-31 13:52:00 · 70 阅读 · 0 评论 -
2021.9.26学习笔记(c语言程序设计)
初识关键字原创 2021-10-04 00:27:00 · 69 阅读 · 0 评论 -
2021.8.30学习笔记(c语言程序设计)
1.表达一个整形(变量age)#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){ int age; age = 20; printf("%d\n", age); return 0;}2.表达一个字符(A)#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){ char c...原创 2021-09-23 23:01:47 · 102 阅读 · 0 评论 -
2021.9.23学习笔记
1.加法运算#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){ int num1 = 0; int num2 = 0; int sum = 0; scanf(" %d%d", &num1, &num2); sum = num1 + num2; printf("sum = %d", sum); return 0;}2.初识循环语句...原创 2021-09-23 18:11:42 · 53 阅读 · 0 评论 -
2021-08-21 c语言入门学习笔记
笔记本1..c 源文件.h 头文件(head)2.基本框架int main()//主函数-程序的入口-有且仅有一个{return 0;}3.printf(文本) 打印文本 \n换行符4.Ctrl+F5运行 或 FN+Ctrl+F5 (笔记本)5. int 是整形的意思main前面的int表示函数调用返回一个整型值return 0;返回0 (前后呼应)6.数据类型char //字符数据型short //短整型int //整型long //长整型long long /..原创 2021-08-21 14:25:18 · 95 阅读 · 0 评论