C
分号;
今天又忘记加分号了吗?
展开
-
常方法与常性对象
结论:常性对象只能调用常性方法,普通对象既可以调用常性方法也可以调用非常性方法,所以我们在构建方法时,在不需要进行对参数进行改变的情况下,尽量定义为常方法。讨论:#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 · 121 阅读 · 0 评论 -
引用的本质与使用
引用的本质:这里面y,a都是x的引用,p指向的也是x的地址。右图为引用的本质引用和指针的区别:从语法角度上看,引用就是一个变量的别名。从底层上看,引用实质上是常性指针。1.以引用返回:在函数将返回值存到将亡值中后,函数执行完毕,函数里所有开辟的空间就会被系统回收,这时b接受到的地址是一个已经不存在的地址。但是因为空间还没有被扰动,所以仍旧可以得到正确的值,但我们不这么用。2..以引用接收d,d获得的是返回的地址,但这时空间可能被扰动,也可能没被扰动,所以得到的是一原创 2022-03-04 18:07:19 · 223 阅读 · 0 评论 -
操作系统的壳初识
我们在使用操作系统的时候,需要进行系统调用,但是如果按照我们前面所说的进行系统调用的时候需要编程。那么对于不编程的人怎么办呢?解决方法是操作系统提供一个壳(shell)来与用户交互。这个壳系统调用与库函数系统调用差不多。用户为什么不能直接进行系统调用?现代的操作系统中,用户的权限是有限的,它不能随意的访问系统中的资源。操作系统屏蔽了用户直接访问硬件的能力,这样做的原因主要是为了安全考虑。也就是前面所说的内核态和用户态。fork的功能是创建一个和自己完全一样的子进程子进程的返回值为0,原创 2021-12-16 16:18:50 · 1050 阅读 · 0 评论 -
系统调用初识
操作系统是一个系统软件,它用户软件提供服务。用户软件对操作系统进行系统调用(system call)。系统调用就是操作系统提供的应用程序界面(API)。操作系统系统调用分类:1.通信类2.设备管理类3.内存管理类4.信息维护类5.进程控制类6.文件管理类系统调用分为三个过程:(以上面read语句为例)1.参数准备阶段首先系统服务的程序将程序需要的参数压到栈上,(有时候不一定是栈,也可能是寄存器,寄存器访问速度比栈快)然后调用read库函数,库函数read将原创 2021-12-16 15:58:37 · 671 阅读 · 0 评论 -
进程,文件,内存简述
1.进程一个程序一旦在操作系统里动起来,他就成为了一个进程。进程表:存放有进程的运行情况以及信息。进程核:一个时刻,一个进程占用的所有资源。核快照:进程在某一时刻的状态。当产生了分段错误(segmentation fault),会进行核倒出(coredump)。也就是把所有计算机的状态存储到一个文件里,通过这个文件的阅读可以知道出界时进程状况,从而对程序进行调试。进程与进程之间可以进行竞争,同步,通信,并在一定情况下可能产生死锁。2.文件文件是操作系统提供的外部存储设备的抽.原创 2021-12-16 15:23:09 · 836 阅读 · 0 评论 -
内核态和用户态的简单了解
1.并不是所有程序都是平等的,对于程序来说,不平等体现在资源的占有量,。内核态就是访问资源多的状态,又称为特权态。用户态就是访问资源受到限制的状态。如果要访问操作系统的内核数据结构,如进程表,需要在内核态才能办到。如果要访问用户程序里的数据,在用户态下就可以。对于运行于内核态的程序,它的安全性和可靠性就要特别注意。一个程序到底要设为内核态还是用户态,要考虑两方面的内容,效率与资源需求。因为内核态以访问的资源多,但用于维护管理(安全,资源等)比较复杂,效率就不高。一般来说:原创 2021-12-16 15:00:46 · 405 阅读 · 0 评论 -
输入三个字符串,按由小到大的顺序输出
#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 · 3733 阅读 · 0 评论 -
改变字节对齐方式求结构体大小
目录(1)改变字节对齐方式:(2)使用方式(3)例子如下(1)改变字节对齐方式:将字节对齐方式改为n #pragmapack(n)将字节对齐方式恢复到默认状态#pragmapack()(2)使用方式vs的默认字节对齐方式是8,linux的默认字节对齐方式是4。当我们可用#pragma pack(n)来改变字节对齐方式。我们最终采用的字节对齐方式是min(设定的字节对齐方式,结构体成员中最大的内置类型大小)。字节对齐抽象化思考就是一次夹出多少块字节。...原创 2021-12-07 10:23:41 · 134 阅读 · 0 评论 -
结构体与联合体结合求大小
#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 · 268 阅读 · 0 评论 -
共用体及大小端存放问题
目录1.共用体求大小。2.应用(大小端问题)欢迎批评指正!!!共用体也就是联合体,变量共用一块空间。1.共用体求大小。结构体的总大小要能整除联合体成员中最大的内置类型大小,有人用了,其他人就不能用。以免发生错误。例:答案为24解析:联合体中成员最大的大小为4*5=20,最大的内置类型大小为long long,为8,故24可以被8整除。2.应用(大小端问题)小端存放:低端存放低地址数据大端存放:低端存放低地址数据如:0x12345678,‘12’为高字节..原创 2021-12-06 22:10:20 · 356 阅读 · 0 评论 -
结构体字节对齐(初识)
一.知识点预备各数据类型的大小: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 · 77 阅读 · 0 评论 -
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 · 328 阅读 · 0 评论 -
struct初始
1.struct的作用:(1).解释struct是结构体关键字,结构体是一种集合,它们里面的成员变量的类型可以相同,也可以不同,可以是数组,也可以是指针,甚至可以是结构体(这个的使用比较复杂,我们在‘6’里详细阐述)。(2).与数组对比①数组里存储的变量是相同类型,而struct里变量可以是不同类型。②数组里的变量是连续的,而struct里的变量是否连续比较复杂,我们后续详细分析。2.struct的定义struct 结构体名{ 结构体所包含的变量或数组};例:..原创 2021-12-04 15:24:39 · 610 阅读 · 0 评论 -
程序运行的过程
首先编写一个简单的c语言程序①预处理②编译③汇编④链接原创 2021-12-01 17:12:53 · 476 阅读 · 0 评论 -
约瑟夫环问题
编号为 1,2,3,…,n 的 n 个人围坐一圈,任选一个正整数 m 作为报数上限值,从第一个人开始按顺时针方向报数,报数到 m 时停止,报数为 m 的人出列。从出列人的顺时针方向的下一个人开始又从 1 重新报数,如此下去,直到所有人都全部出列为止。思路:采用标号法。使每一个人的初始生命值为1,当一个人报号到n的时候,将他的生命值置为零,下次计数的时候就跳过它,直到留下一个人。代码如下:#include<stdio.h>#include<assert.h>#in原创 2021-11-29 09:24:32 · 150 阅读 · 0 评论 -
变量与内存
目录内存分布总结:代码显示:解释:问题:内存分布代码区(函数) 全局静态变量区(定义在函数之外的,或加有static的变量) 栈(普通定义的变量) 堆(动态内存分配malloc) 生命周期 作用域 默认值 内存区域 链接属性 普通局部变量 从函数创建开始到函数结束 函数内 随机值 栈 无 静态局部变量 从函数创建开始到进程结束 函数内 随机值 全局(静态)变量区 .原创 2021-11-22 21:12:36 · 130 阅读 · 0 评论 -
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 · 258 阅读 · 0 评论