自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(91)
  • 收藏
  • 关注

原创 88.冒泡算法(思路分析)

在一排数据中,把第一个数据与第二个数据进行比较大小。如果第二个的数据比第一个数据小,就交换他们的位置(冒泡一次),然后比较第二个和第三个,直到比较到n-1个数据和第n个数据。举例:如有一排数据:5,3,6,1,0第一次把5和3进行比较大小。很明显5和3中5大,所以就交换他们的位置,此时这一排数据就变成了3,5,6,1,0。同理:第二次比较后:3,5,6,1,0。第三次比较后:3,5,1,6,0。第四次比较后:3,5,1,0,6。如上面例子中,比较4次以后,最大的数6就到了最后面。

2024-10-24 20:43:05 176

原创 87.#include预处理命令(2)

当第一次进入myhead.h时,如果没有定义宏MYHEAD_H,就执行条件编译种的代码,第二次在进入myhead.h时,因为已经定义了MYHEAD_H,就不会在执行条件编译种的代码,这样就不会发生重复定义的问题。使用条件编译可以解决上节课的问题。

2024-10-21 19:57:38 130

原创 86.#include预处理命令(1)

当使用""时,编译器首先会在包含当前源文件的目录下查找头文件。如果在当前目录下没有找到,才会到系统指定的标准头文件路径中去查找。这种方式通常用于包含用户自定义的头文件,比如自己编写的.h文件,例如"myhead.h"。当在#include指令中使用时,编译器会到系统指定的标准头文件路径中去查找头文件。一般用于包含标准库的头文件,例如。也叫做文件包含命令,用来引入对应的头文件(.h文件)。在任意文件夹下创建一个main.c,并写入以下代码。3.修改myhead.h,代码如下。

2024-10-18 19:37:41 380

原创 85.条件编译2

条件编译。

2024-09-25 19:49:16 292

原创 84.条件编译1

条件编译允许编译器根据指定条件来选择性地编译代码的某些部分。条件编译区域以 #if、#ifdef 或 #ifndef 等命令作为开头,以 #endif 命令结尾。条件编译区域可以有任意数量的 #elif 命令,但最多一个 #else命令。

2024-09-23 19:41:00 226

原创 83.static关键字

使用static关键字修饰局部变量,只在第一次进入作用域的时候初始化。函数退出后,这些变量的值仍保持。静态局部变量的生命周期是从定义起到程序结束。使用static修饰的静态函数只能在声明所在的文件内部调用,无法被其他文件调用。静态全局变量仅当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量。static关键字可以修饰局部变量,全局变量和函数。

2024-09-18 20:42:46 223

原创 82.C语言中的内存布局2

编译程序,然后使用命令nm test | grep test_查看内存分布符号B,D等含义如下:B/b:.bss段D/d:.data段R/r:.rodata段T/t:.text段需要注意的是,char *test_str = "hello world";中的test_str在.data段,而字符串hello world在.rodata段。查看.rodata段中的内容:堆栈如何查看?

2024-09-11 20:36:36 394

原创 81.C语言中的内存分布

未初始化数据段:未初始化的全局变量和未初始化的静态变量,初始化为0的全局变量和初始化为0的静态变量。代码段:通常是指用来存放程序执行代码的一块内存区域。初始化数据段:已初始化的全局变量,已初始化的静态变量。堆:如调用malloc函数申请的内存(向上增长)。栈:如局部变量,形参,返回值。只读数据段:如字符串,数字等。栈是系统自动分配,系统自动释放。堆是程序员手动申请,手动释放。

2024-09-09 19:47:37 218

原创 80.动态申请内存

在定义变量的时候会在内存中申请空间。除了在定义变量的时候申请内存空间,也可以使用库函数动态申请内存,

2024-09-02 20:40:44 295

原创 79.位域

有些数据在存储的时候并不需要一个完整的字节。比如使用一个变量表示开关的状态,开关只有开和关俩个状态,所以只需要使用0和1表示,也就是一个二进制位。所以这时候使用一个完整的字节就比较浪费内存,正是基于这种考虑,C语言提供了一种数据结构,叫做位域。如果没有位宽为12的无名成员,a、c 将会挨着存储,sizeof的结果为 4;有了这12位作为填充,a、c将分开存储,sizeof的结果为 8。位域成员可以没有名称,只给出数据类型和位宽即可。在结构体成员后面使用冒号(:)和数字表示改成员所占的位数。

2024-08-28 21:37:00 214

原创 78.内存对齐

有下面例子输出结果是8。

2024-08-21 22:34:10 322 1

原创 77.共用体应用场景

大端模式与小端模式是数据在内存中存储的方式。大端模式(Big-Endian)和小端模式(Little-Endian)的定义如下:1.Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。2.Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

2024-08-16 21:13:23 308

原创 76.共用体

共用体(有的资料也叫联合体,)和结构体很像,也可以包含多个不同类型的成员。但是行为方式和结构体完全不同。我们先看共用体的语法格式。

2024-08-14 20:48:19 324

原创 75.typedef关键字(2)

/ 使用 typedef 定义一个数组指针类型array ptr;// 使用 typedef 后的数组指针类型。

2024-08-09 23:51:18 341

原创 74.typedef关键字(1)

typedef关键字:给其他类型起别名。为什么要给其他类型起别名?C语言定义变量的语法:int a;Fortran语言定义变量的语法:intrger :: a;为了让Fortran的程序员快速上手C语言,所以C语言的开发者就开发出了typedef关键字。

2024-08-07 19:55:16 238

原创 73.结构体指针参数传递

结构体指针也可以作为参数传递,相对于结构体变量参数传递,结构体指针变量作为函数参数传递速度更快,效率更高。

2024-08-05 22:52:16 270

原创 72.结构体变量直接赋值

因为指针共同指向了一个相同的地址,所以该地址指向的值发生变化会都发生变化。所以需要补充的结论是:如果结构体中有指针成员,切勿直接赋值,要分开赋值,否则成员之间会互相影响。通过实验,这个例子也可以运行成功,如果我们修改一下结构体变量x中的title成员,会发现结构体变量z中的title成员也会发生变化。通过上节课的学习得出了一个结论:俩个相同类型的结构体变量直接可以只用赋值号进行赋值。我们改一下这个例子,在test结构体中添加一个指针类型的成员。这是为什么呢,我们来看这张图。很显然,这是不正确的。

2024-08-01 21:15:34 338

原创 71.结构体参数传递

如果结构体变量可以作为函数参数,那么俩个相同类型的结构体变量直接可以只用赋值号进行赋值。结构体变量可以作为函数参数和函数返回值。

2024-07-30 21:32:38 157

原创 70.结构体指针

int num;

2024-07-30 21:31:50 197

原创 69.结构体数组

struct 结构体类型名 数组名[数组大小];//学号int age;

2024-07-25 20:32:47 206

原创 68.结构体嵌套

结构体嵌套指的是在结构体中含有结构体类型的成员。举例定义一个结构体用来存放一个人姓名,性别,出生日期,年龄,就可以使用结构体嵌套。

2024-07-23 21:32:38 183

原创 67.结构体变量

注意:定义结构体类型变量会在内存中分配空间语法格式:struct 结构体的名称 结构体变量名举例:}mybook;//这种写法是全局变量。

2024-07-19 22:12:40 174

原创 66.函数指针和回调函数

回调的意思一个函数具有函数指针类型的函数参数,将这个函数指针作为函数参数传到函数里面,当函数执行完之后,再执行通过函数指针传进去的这个函数。这个过程就叫做回调。(或者说通过函数指针调用的函数叫做回调函数)函数指针最多的一个用处就是回调函数。

2024-07-15 22:22:40 179

原创 65.指针函数和函数指针

函数的类型指的是函数返回值,比如返回整型,浮点型,字符型,指针类型等等。指针函数指的就是函数返回值是指针类型的函数。注意:不要返回局部变量的指针。

2024-07-10 22:41:12 323

原创 64.函数参数和指针变量

函数参数的类型可以是普通类型,也可以是指针类型。什么时候使用指针类型呢?

2024-07-04 22:53:47 385

原创 63.指针常量和常量指针

1.指针常量自身不能被修改,但是指向的地址中的值可以修改。2.常量指针是指针指向的地址中的值不能被修改,但是可以改变常量指针的指向。

2024-07-01 21:38:41 322

原创 62.指针和二维数组(2)

1.如a是一个二维数组,则数组中的第i行可以看作是一个一维数组,这个一维数组的数组名是a[i]。2.a[i]代表二维数组中第i行的首个元素的地址,即a[i][0]的地址。

2024-06-27 23:00:03 339

原创 61.指针和二维数组(1)

在一维数组中,一维数组的数组名就是一维数组中首个元素的地址。若有int a[5];int *p;则p=&a[0]可以简写成p=a;在C语言中,二维数组如int a[2][2]={1,2,3,4};可以按照下面的表格来理解。列0列1行0a[0][0]=1a[0][1]=2行1a[1][0]=3a[1][1]=4但是在内存中的存贮则是所以二维数组又叫数组的数组,本质上还是一维数组。因为二维数组中的一行可以看作是一个一维数组,而这个一维数组的数组名是a[0]和a[1]。

2024-06-24 23:13:37 301

原创 60.指针数组和数组指针

指针数组是一个数组,在指针数组中存放的是指针变量。定义一个指针数组pint *p[5];内存模型如下:指针数组的初始化。

2024-06-19 21:51:29 363

原创 59.指向指针的指针(二级指针)

return 0;解析:所以printf输出的结果是100。往下思考:指针变量也是变量,也有自己的地址。对指针变量p取地址(&p)就可以拿到指针变量p的地址。在讲指针的时候我们说指针变量存放的是地址(普通变量的地址),只不过用来存放指针变量的地址的指针叫做指向指针的指针,也叫做二级指针(用来存储指针变量的地址)。数据类型 **变量名 = 指针变量地址;return 0;

2024-06-15 00:20:29 282

原创 58.强制类型转换

当int a=2,int b=3,double x=3.5,double y=2.5,则表达式(double)(a+b)/2 + (int)x%(int)y的值是多少?这个值的类型是什么?从占内存小的类型向占内存大的类型转换精度不会丢失,如转换方向为char->int->long->double。强制类型转换可以实现类型之间的互相转换。并且会自动进行转换。类型是double类型。

2024-06-13 22:02:36 394

原创 57.void指针(万能指针)

在定义变量的时候,需要用到变量的类型,变量的类型在表示在内存中的大小,而void是空,表示的是无类型。所以如果用void来定义一个变量会发生错误(无法在内存中挖一个坑)。所以不可以用void定义变量,但是可以使用void来定义指针。void指针我们称之为通用指针,或者万能指针,因为他可以指向任意类型的数据。换句话说,任意类型的指针都可以赋值给void指针。

2024-06-04 22:48:06 242

原创 56.野指针和悬空指针

野指针指的是指针指向的内存地址是未知的(随机的,不正确的内存地址)。

2024-05-29 20:47:16 392

原创 55.指针和数组

结论:1.数组名是数组中第零个元素的首地址2.数组中元素的首地址+1,地址不一定+1,而是增加数组中元素类型的大小。3.对数组名取址得到是数组中第零个元素的首地址,执行+1的操作地址会增加整个a数组的大小。而不是增加数据中元素类型的大小。

2024-05-21 22:13:13 178

原创 54.指针

口语中的指针一般指指针变量,指针变量存放的是一个地址。普通变量存放的是数据。如变量在内存中存储方式如下:编译器把变量名a和地址0x0001进行了关联,所以用变量名a可以访问地址为0x0001的数据1。本质是通过地址访问数据。而指针变量存放的是一个地址,如果指针变量存放的地址是0x0001,那这个指针变量是不是也可以访问地址为0x0001的数据1呢。这个就是指针变量的作用。定义指针变量类型名 *指针变量名如 char *p;

2024-05-15 22:45:05 284

原创 53.二维数组

二维数组又叫数组的数组,本质上还是一维数组。语法格式:元素类型 数组名称[][];如{1,2},{3,4}

2024-04-28 21:33:11 167

原创 52.函数递归

函数调用自己本身的行为叫做函数递归。

2024-04-23 21:45:40 252

原创 51.函数嵌套和链式访问

在一个函数中调用另外一个函数叫做函数嵌套。

2024-04-23 21:45:06 202

原创 50.函数返回值

函数返回值指的是函数被调用后,执行函数体中的代码所得到的结果,这个结果通过return语句返回。

2024-04-15 22:30:38 280

原创 49.函数的形参和实参

实参全称为"实际参数",函数在被调用时包含了确切数据的参数叫做实参。实参会在函数内部中被使用。

2024-04-11 21:03:16 318

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除