自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ++的重载

#include<stdio.h>#include<iostream>using namespace std;class Object{private: int value;public: Object(int a):value(a){} Object& operator=(const Object& it) { if (this != &it) { this->value = it.value; } retu.

2022-03-06 12:04:04 193

原创 常方法与常性对象

结论:常性对象只能调用常性方法,普通对象既可以调用常性方法也可以调用非常性方法,所以我们在构建方法时,在不需要进行对参数进行改变的情况下,尽量定义为常方法。讨论:#include<stdio.h>#include<iostream>using namespace std;class Object{private: int value;public: Object(int a):value(a){} int& getValue() { retu

2022-03-06 10:46:31 117

原创 引用的本质与使用

引用的本质:这里面y,a都是x的引用,p指向的也是x的地址。右图为引用的本质引用和指针的区别:从语法角度上看,引用就是一个变量的别名。从底层上看,引用实质上是常性指针。1.以引用返回:在函数将返回值存到将亡值中后,函数执行完毕,函数里所有开辟的空间就会被系统回收,这时b接受到的地址是一个已经不存在的地址。但是因为空间还没有被扰动,所以仍旧可以得到正确的值,但我们不这么用。2..以引用接收d,d获得的是返回的地址,但这时空间可能被扰动,也可能没被扰动,所以得到的是一

2022-03-04 18:07:19 216

原创 引用与const的关系

1.const int a=10; ①int &b=a; ②//error解释1:因为由①得a的值不能改变,但②中可通过b改变a的值。解释2:②中为int=const int,从右向左功能扩大,所以不对。2.const int a=10; ①int & c=(int &)a;②//right注:(int &)这个强转意味着什么?3.int a=10,b=20;//①int * p=&a;//②int * s=p;//③

2022-03-04 16:59:25 466

原创 操作系统的壳初识

我们在使用操作系统的时候,需要进行系统调用,但是如果按照我们前面所说的进行系统调用的时候需要编程。那么对于不编程的人怎么办呢?解决方法是操作系统提供一个壳(shell)来与用户交互。这个壳系统调用与库函数系统调用差不多。用户为什么不能直接进行系统调用?现代的操作系统中,用户的权限是有限的,它不能随意的访问系统中的资源。操作系统屏蔽了用户直接访问硬件的能力,这样做的原因主要是为了安全考虑。也就是前面所说的内核态和用户态。fork的功能是创建一个和自己完全一样的子进程子进程的返回值为0,

2021-12-16 16:18:50 1037

原创 系统调用初识

操作系统是一个系统软件,它用户软件提供服务。用户软件对操作系统进行系统调用(system call)。系统调用就是操作系统提供的应用程序界面(API)。操作系统系统调用分类:1.通信类2.设备管理类3.内存管理类4.信息维护类5.进程控制类6.文件管理类系统调用分为三个过程:(以上面read语句为例)1.参数准备阶段首先系统服务的程序将程序需要的参数压到栈上,(有时候不一定是栈,也可能是寄存器,寄存器访问速度比栈快)然后调用read库函数,库函数read将

2021-12-16 15:58:37 664

原创 进程,文件,内存简述

1.进程一个程序一旦在操作系统里动起来,他就成为了一个进程。进程表:存放有进程的运行情况以及信息。进程核:一个时刻,一个进程占用的所有资源。核快照:进程在某一时刻的状态。当产生了分段错误(segmentation fault),会进行核倒出(coredump)。也就是把所有计算机的状态存储到一个文件里,通过这个文件的阅读可以知道出界时进程状况,从而对程序进行调试。进程与进程之间可以进行竞争,同步,通信,并在一定情况下可能产生死锁。2.文件文件是操作系统提供的外部存储设备的抽.

2021-12-16 15:23:09 808

原创 内核态和用户态的简单了解

1.并不是所有程序都是平等的,对于程序来说,不平等体现在资源的占有量,。内核态就是访问资源多的状态,又称为特权态。用户态就是访问资源受到限制的状态。如果要访问操作系统的内核数据结构,如进程表,需要在内核态才能办到。如果要访问用户程序里的数据,在用户态下就可以。对于运行于内核态的程序,它的安全性和可靠性就要特别注意。一个程序到底要设为内核态还是用户态,要考虑两方面的内容,效率与资源需求。因为内核态以访问的资源多,但用于维护管理(安全,资源等)比较复杂,效率就不高。一般来说:

2021-12-16 15:00:46 399

原创 输入三个字符串,按由小到大的顺序输出

#include<stdio.h>#include<string.h>void init(char*a,char *b,char *c){ gets_s(a,20); gets_s(b,20); gets_s(c,20);}void swap(char* a, char* b){ char tmp[20] = {0}; strcpy_s(tmp,20,a); strcpy_s(a,20,b); strcpy_s(b,20,tmp);}void .

2021-12-16 13:57:09 3641

原创 改变字节对齐方式求结构体大小

目录(1)改变字节对齐方式:(2)使用方式(3)例子如下(1)改变字节对齐方式:将字节对齐方式改为n #pragmapack(n)将字节对齐方式恢复到默认状态#pragmapack()(2)使用方式vs的默认字节对齐方式是8,linux的默认字节对齐方式是4。当我们可用#pragma pack(n)来改变字节对齐方式。我们最终采用的字节对齐方式是min(设定的字节对齐方式,结构体成员中最大的内置类型大小)。字节对齐抽象化思考就是一次夹出多少块字节。...

2021-12-07 10:23:41 134

原创 结构体与联合体结合求大小

#include<stdio.h>union F{ int a;//4 long b;//4 char c;//1 int arr[5];//20} F1;//20struct H{ int a;//4 char b;//1 union F c;//20 4 double d;//8}H1;//40//4+1+3+20+4+8int main(){ //先问是32位系统还是64位系统 printf("%d %d", sizeof(F1), size.

2021-12-07 00:27:05 249

原创 结构体设计及结构体相对偏移

一.结构体设计尽量把具有最小的内置类型的结构体成员放在前面。二.计算结构体中成员的相对偏移量a b b c c c c d d d d f f f f f f f f l l l l l l l l a:0b:2c:4d:8f:16l:24方法1:将char*变.

2021-12-06 23:11:09 260

原创 共用体及大小端存放问题

目录1.共用体求大小。2.应用(大小端问题)欢迎批评指正!!!共用体也就是联合体,变量共用一块空间。1.共用体求大小。结构体的总大小要能整除联合体成员中最大的内置类型大小,有人用了,其他人就不能用。以免发生错误。例:答案为24解析:联合体中成员最大的大小为4*5=20,最大的内置类型大小为long long,为8,故24可以被8整除。2.应用(大小端问题)小端存放:低端存放低地址数据大端存放:低端存放低地址数据如:0x12345678,‘12’为高字节..

2021-12-06 22:10:20 335

原创 结构体字节对齐(初识)

一.知识点预备各数据类型的大小:64位:注意:在32位和64位下,指针的大小不一样,32位指针大小为4byte,而64位的指针大小为8byte。二.字节对齐的原因内存大小的基本字节是byte,理论上,可以从任意地址访问变量,但是,cpu并非是逐字节访问内存的,而是以2,4或8的倍数。为了访问方便,这就要求数据类型在空间上以一定的规则排列。比如:"struct A{char a;int b;char c;}"以方法一存...

2021-12-06 14:47:51 70

原创 结构体的简单使用(一个简单的学生管理系统)

题目:从键盘读取n个学生的信息(包括学号,姓名,成绩),然后按成绩的高低顺序输出:分析:①读取信息②排序③显示信息思路:用结构体数组存放n个学生的成绩,采用冒泡法进行排序。

2021-12-06 12:18:24 429

原创 typedef的用法

我们上一个博客介绍了typedef的作用以及重定义变量类型,今天我们对它进行详细的分类1.将数组重定义分析:如果将一个数组冲定义,数组中包括的重要信息有①这个数组的类型②这个数组的大小例假设我创建一个大小为10的int类型的数组,“int a[10];”,重命名即为typedef int Arr[10]#include<stdio.h>#include<typeinfo>typedef int Arr[10];int main(){ Arr a..

2021-12-05 10:21:49 319

原创 struct初始

1.struct的作用:(1).解释struct是结构体关键字,结构体是一种集合,它们里面的成员变量的类型可以相同,也可以不同,可以是数组,也可以是指针,甚至可以是结构体(这个的使用比较复杂,我们在‘6’里详细阐述)。(2).与数组对比①数组里存储的变量是相同类型,而struct里变量可以是不同类型。②数组里的变量是连续的,而struct里的变量是否连续比较复杂,我们后续详细分析。2.struct的定义struct 结构体名{ 结构体所包含的变量或数组};例:..

2021-12-04 15:24:39 606

原创 程序运行的过程

首先编写一个简单的c语言程序①预处理②编译③汇编④链接

2021-12-01 17:12:53 469

原创 约瑟夫环问题

编号为 1,2,3,…,n 的 n 个人围坐一圈,任选一个正整数 m 作为报数上限值,从第一个人开始按顺时针方向报数,报数到 m 时停止,报数为 m 的人出列。从出列人的顺时针方向的下一个人开始又从 1 重新报数,如此下去,直到所有人都全部出列为止。思路:采用标号法。使每一个人的初始生命值为1,当一个人报号到n的时候,将他的生命值置为零,下次计数的时候就跳过它,直到留下一个人。代码如下:#include<stdio.h>#include<assert.h>#in

2021-11-29 09:24:32 141

原创 变量与内存

目录内存分布总结:代码显示:解释:问题:内存分布代码区(函数) 全局静态变量区(定义在函数之外的,或加有static的变量) 栈(普通定义的变量) 堆(动态内存分配malloc) 生命周期 作用域 默认值 内存区域 链接属性 普通局部变量 从函数创建开始到函数结束 函数内 随机值 栈 无 静态局部变量 从函数创建开始到进程结束 函数内 随机值 全局(静态)变量区 .

2021-11-22 21:12:36 126

原创 const

const使用时注意:①使用const定义的时候一定要给初值,因为后面没有赋值权限了。②数据类型对于const来说是透明的,即const int=int const③const只修饰它的直接右边。如const int *p(const修饰 int类型的*p), int *const p(const修饰 int* 类型的p)④权限只能平等传递,或者缩小传递举例说明:假设小黑和小红是男女朋友,他(她)们有以下几种情况:1.小黑对小红没有要求。2.小红对小黑也没有要求。3...

2021-10-30 13:51:07 41

原创 用三种方法实现字符串复制

#include<stdio.h>void My_strcpy_1(char *arr,char *err){ int i = 0; for (; *(arr + i) != '\0'; i++) { *(err+i) = *(arr+i); } *(err + i) = '\0'; }void My_strcpy_2(char* arr, char* err){ char* p = arr; char* q = err; for (p; *(p) != .

2021-10-30 11:05:12 731

原创 奇数在前,偶数在后

(1)判断奇偶方式①i%2==0为偶数 i%2!=0为奇数②i&0x1=0为偶数 i&0x1=1为奇数要注意&&和 &的优先级。//奇数在前,偶数在后#include<stdio.h>#include<assert.h>void Odd_Even(int arr[],int len){ assert(arr != nullptr); int i = 0; int j = len -...

2021-10-27 23:04:03 108

原创 找一个区间内的质数

寻找(min,max)这个区间上的指数在做这道题之前,我们需要明确:①质数一定是奇数②a是一个奇数,如果a不能被3~整除,那么a就是一个质数。#include<stdio.h>#include<math.h>void prime(int min, int max){ int i; for ( i = min+1; i <max; i=i+2) { int j; for ( j = 3; j <= sqrt(i); j++) {

2021-10-23 18:14:15 269

原创 while /do while习题练习

其中有些题目用了两种方法,用函数名_1,函数名_2区分开。(1)输出1-1/2+1/3-...#include<stdio.h>double S_1(int n){ double sum = 0.0; int tag = 1; for (int i = 1; i <= n; i++) { sum = sum + 1.0 / i*tag; tag = tag * (-1); } return sum;}double S_2(int

2021-10-15 20:27:27 244

原创 位运算初始

(1)使用位运算#include<stdio.h>int main (){ int a, b; printf("请输入两个值\n"); scanf_s("%d %d", &a, &b); a = a ^ b; b = a ^ b; a = a ^ b; printf("%d %d\n", a, b);}感觉异或运算很有趣1^2=0000 0001 ^ 0000 0010=0000 0011就相当于1+2=3 0000 001...

2021-10-15 19:41:48 34

原创 n个人参加乒乓球比赛,1vs1,要比赛多少次?

按常规方法#include<stdio.h>#include<math.h>int ping(int n){ int count = 0; while (n > 1) { count =count + n / 2; n = n-n / 2; } return count;}int main(){ printf("请输入比赛的人数\n"); int a; scanf_s("%d", &a); printf("%d", pin

2021-10-15 00:22:15 596

原创 求一个数的各个位分别是多少

(1)求位数eg:123/1=123 i=1123/10=12 i=2123/100=1 i=3123/1000=0 结束从中我们可以看出要点如下:①除数依次乘10②每次除完都要进行判断,直到出现商为0停止③要有一个负责计数的变量依次递增。方法:1:使用forint Digit_place(int n){ int digit = 0; for (int i = 1; (n/i)!=0; i = i * 1...

2021-10-14 23:42:20 1110

空空如也

空空如也

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

TA关注的人

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