- 博客(13)
- 收藏
- 关注
原创 C++类和对象详解(3)
上一节中我们通过日期类将类的默认成员函数进行了解释和实现,下面我们将进行类和对象的最后讲解,将类的其他用法说明。构造函数扫尾初始化和赋值class Date{public: Date(int year, int month, int day) { _year = year; _month = month; _day = day; } private: int _year; int _month; int _day;};再上面代码中,虽然上述构造函数调用之后,对象中已经有
2022-02-14 10:59:42 147
原创 C++类和对象详解(2)
在上一篇中我们讨论了什么是面向对象编程,类的定义,作用域,实例化,访问限定符,大小计算,以及一个很重要的知识this指针。https://blog.csdn.net/hellooworldd/article/details/122641166?spm=1001.2014.3001.5501下面介绍进一步的内容。类的6个默认成员函数c++类中如果一个成员没有,那么这个类叫空类,但是这个类虽然我们在代码中什么东西都看不见,但是编译器会给我们生成六个默认成员函数: 1构造函数,2析构函数,3拷贝构造函数,
2022-02-10 19:58:10 135
原创 C++类和对象详解(1)
C++类和对象详解(1) 说明:对于c++类和对象的讲解需要用到的c语言语法需要读者自行熟悉。什么是面向过程&&面向对象? 学过c语言的同学可能会知道,要完成一个程序,通常是用调用函数解决问题的,在分析出求解问题的步骤以后,通过各个函数调用逐步的解决问题。这就是面向过程。 而cpp是基于面向对象的,它的侧重点是对象,将一件事情拆分成不同的对象,靠对象之间的交互来解决问题,所以类和对象是cpp中一个重要的内容。什么是类?类是对象的共同特征的合集,类只有在示例化以后才能变为对象
2022-01-22 18:03:56 433
原创 C语言编译链接的简单解释
前言 在初学c语言的过程中,一般同学都会先使用集成开发环境写代码,而忽略了人类能看懂的代码到电脑执行输出的过程。这对于初学者来说相对友好,但经过一段时间学习后,我们要加深对于代码的理解,就需要详细的了解它的编译链接过程。编译三个过程 编译分为预编译,编译,汇编三个过程。预编译只完成预处理,包括头文件的包含(#include),#define定义符号的替换,#pragma,删除注释。编译把c语言转化成汇编代码,要进行语法分析,词法分析,语义分析,符号汇总,有兴趣的小伙伴可以参考《编译原理
2021-10-16 18:21:13 295
原创 C语言文件操作
前言 文件操作是c语言中一个比较特殊的内容,虽然在实际工作中用的不是很多,但了解它的基本操作还是必要的,在这里c语言中对于文件的操作是指对于数据文件的操作。什么是文件在程序设计中,我们所说的文件一般指两种:程序文件和数据文件。程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。(文本文件和二进制文件
2021-10-03 20:56:52 170
原创 C语言用动态内存管理实现一个可以扩容的通讯录
前言 要实现一个通讯录,通讯录可以用来存储人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址,可能我们在实现时,首先想到的是将这些信息储存在一个结构体中,用一个结构体数组来存储每个人的信息。然而我们如果用静态的数组,会有很多不合适的地方。如果需要存放的人的信息很多,我们的数组小而不够了怎么办?如果存放的信息少我们数组太大了浪费空间怎么办?这里就需要用到动态内存开辟的方法讲数组进行灵活的扩容,本文代码分为Contact.h存放头文件宏定义结构体数组以及函数头,Contact.c存放函数详细内容,t
2021-10-02 19:37:25 1049
原创 结构体的内存对齐
内存对齐 在看结构体内存对齐前大家可以先看两组结构体的代码struct S1{ char c1; int i; char c2;};struct S2{ char c1; char c2; int i;};#include<stdio.h>int main(){ printf("%d\n", sizeof(struct S1)); printf("%d\n", sizeof(struct S2)); return 0;} 结构体所包含成员的种类数目
2021-09-24 10:06:05 74
原创 用c语言实现排序算法之直接插入排序&&希尔排序
前言本文将介绍两种排序,即直接插入排序和希尔排序,注意两种排序方法是递进关系,希尔排序就是在直接插入排序的基础上进行进一步的优化。先上代码,最后会有代码解析。(本次排序按照升序排序)代码#include<stdio.h>#include<time.h>#include<stdlib.h>//直接插入排序//假设用升序//可以想象成摸牌void InsertSort(int* a, int n)//时间复杂度O(n^2){ for (int i = 0
2021-09-20 22:31:16 326
原创 了解函数机制——C语言string库函数实现
前言 C语言的库函数给了我们写代码带来极大的便利,但在使用这些函数时,也会有许许多多参数,返回值的问题,对于这些问题。我们可以通过了解函数的实现过程来深化对于库函数的使用。下面将会列举几个常用的string库函数的实现。strlen函数int my_strlen(const char* str){ int count = 0; while (*str) { count++; str++; } return count;}strcpy函数char* my_strcpy(ch
2021-09-17 16:33:32 278
原创 数据结构单链表(不带头节点)实现源代码需要二级指针问题解释以及对比带头结点(不需要二级指针)
数据结构单链表(不带头节点)实现源代码需要二级指针问题解释以及对比带头结点(不需要二级指针) 在数据结构链表部分,难免会因为c语言基础不够扎实而导致代码逻辑等出现问题,尤其是指针部分的应用,在不带头的单链表和带头的链表中指针的应用尤其显著,要充分理解指针部分的应用。在源代码后讲依靠源代码中指针的命名解释为什么在单链表增删查改中使用二级指针。源代码Slist.h头文件#pragma once#include<stdio.h>#include<stdlib.h>typed
2021-09-03 17:06:56 567
原创 浮点数在计算机内部的存储形式
根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式: (-1)^S * M * 2^E (-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。 M表示有效数字,大于等于1,小于2。 2^E表示指数位。举例来说: 十进制的5.0,写成二进制是 101.0 ,相当于 1.01×2^2 。 那么,按照上面V的格式,可以得出s=0,M=1.01,E=2。十进制的-5.0,写成二进制是 -101.0 ,相当于 -1.0...
2021-08-10 17:54:28 410
原创 函数栈帧的创建和销毁
在了解函数栈帧的创建和销毁前,先了解一下几个基本概念。寄存器:是一种储存数据的一个存储部件,集成在cpu上,高效但数量少。在此篇文章中用到的寄存器有,通用寄存器:exa,ebx,ecx,edx。以及栈顶和栈底寄存器:esp,ebp。 函数栈帧: 每一次函数调用都是一个过程这个过程我们称为函数的调用过程,这个过程要为函数开辟栈空间,用于本次函数的调用中临时变量的保存,现场保护。 本文将用一个简单的c语言程序进行函数栈帧的分析(上图),并且在调...
2021-08-10 15:25:00 128
原创 用C语言实现井字棋游戏
本文所用的井字棋代码涉及数组以及函数方面的知识,看不懂代码的读者需要对此部分知识复习。废话不多说,先上代码,代码后有实现过程解析。game.h 头文件#pragma once#include <stdio.h>#include <stdlib.h>#include <time.h>#define ROW 3#define COL 3//初始化棋盘void InitBoard(char board[ROW][COL], int row, int
2021-07-27 17:24:11 633 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人