自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言之动态内存

这一段代码有两个问题,第一个问题也就是最大的问题就是对空指针进行解引用操作,形参p是实参str的一份临时拷贝, 改变p的值并不会影响str,str仍是NULL,所以strcpy(str,“hello world”)其实是对空指针的解引用,会导致程序崩溃,第二个问题就是malloc创建了动态内存,但是没有free,导致内存泄漏。有时会我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理使用内存,我们一定会对内存的大小做灵活的调整。//释放动态内存必须知道起始地址,后面要给指针++;

2024-03-09 20:36:57 853

原创 Linux进程之环境变量

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。再比如在Xshell里面,ls之类的指令可以直接运行,而自己写的myproc程序却要写清楚绝对路径或者相对路径,这也是因为环境变量,系统不存在myproc的环境变量。

2023-09-04 20:38:27 87

原创 Linux基本权限

Linux下有两种用户:超级用户(root)、普通用户。超级用户:可以再linux系统下做任何事情,不受限制普通用户:在linux下做有限的事情。超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。命令:su [用户名]功能:切换用户。例如,要从root用户切换到普通用户user,则使用 su user。要从普通用户user切换到root用户则使用 suroot(root可以省略),此时系统会提示输入root用户的口令。

2023-07-06 17:07:37 146 2

原创 类和对象(中)

但是:main函数中不能直接调用Time类的析构函数,实际要释放的是Date类对象,所以编译器会调用Date类的析构函数,而Date没有显式提供,则编译器会给Date类生成一个默认的析构函数,目的是在其内部调用Time类的析构函数,即当Date对象销毁时,要保证其内部每个自定义对象都可以正确销毁main函数中并没有直接调用Time类析构函数,而是显式调用编译器为Date类生成的默认析构函数。对于内置类型,在传值传参时,可以直接拷贝,而自定义类型传值传参时,编译器无法直接拷贝,必须先调用拷贝构造函数。

2023-03-17 23:05:10 84 4

原创 C++入门之类和对象(上)

/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数类的两种定义方式:1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

2023-03-11 10:25:49 151 5

原创 C++入门之引用

其实返回值并不是n,而是把n拷贝给一个临时变量,因为n在count()栈帧里,出了作用域就会销毁,如果小,存在寄存器(4or8byte),如果大,提前在main()中提前开辟一块空间。PosAt()中返回值虽然看起来是需要临时变量返回,但是返回值属于结构体,出了作用域并不会销毁,此时可以用传引用返回,减少拷贝,还可以修改返回对象。此时传引用返回,返回的不是临时变量,而是一个引用,也就是n 的别名,相当于用n 直接返回,减少了拷贝。引用权限可以缩小,可以不变,但是不能放大,指针也是如此。

2023-03-05 21:28:24 77 2

原创 Linux常见指令

Linux常见指令

2023-01-11 22:20:19 109 2

原创 结构体之内存对齐

所以在设计结构体的时候,我们既要满足对齐,又要节省空间,让占用空间小的成员尽量集中在一起。S1和S2类型的成员一模一样 ,不少初学者会认为两者大小一样,都为六个字节,只进行简单的相加,忽略了内存对齐。4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整。而对齐的内存访问仅需要一次访。3. 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

2022-09-24 20:48:59 237 4

原创 指针和数组的笔试题

分析:&aa取整个二维数组的地址,+1跳过整个二维数组,aa数组名首元素地址,在二维数组中就是第一行的地址,+1跳过第一行,指向第二行第一个元素,*(ptr1-1)相当于aa[1][5],*(ptr2-1)相当于aa[0][5]//strlen得到arr后,从arr数组首元素的地方开始计算字符串的长度,直到直到\0,但是arr数组中没有\0,arr内存的后边是否有\0,在什么位置是不确定的,所以\0之前出现了多少个字符是随机的。a[0]是第一行的地址,怕p[0]也就是a[0][0] ,结果为1。

2022-09-14 20:29:14 172 3

原创 static的用法

static关键字修饰局部变量时,改变了变量的存储类型,普通的局部变量存储在栈区,被static修饰的变量存储在静态区,存储在静态区的变量,出了作用域不会销毁,依然存在,所以静态区的生命周期就是程序的生命周期,程序结束时静态变量回收空间。结果为2 3 4 5 6 7 8 9 10 11。两段代码的区别就是int i前面的static。修饰函数与修饰全局变量十分相似。注:extern声明外部符号。生命周期变长,作用域不变。结果为222222222。static修饰函数。...

2022-08-29 08:52:26 91

原创 指针详解(二)

看到这里,肯定会有人认为char* ps = "abcdef"放入的是一个字符串,其实并不是,这里存放的是字符串首元素的地址,也就是a的地址。//数组的地址+1,跳过整个数组的大小,所以 &arr+1 相对于 &arr 的差值是40.类似于int*a的指针类型是int*,float*b的类型是float*,此数组指针的类型为int(*)[10].二维数组的首地址就是二维数组的第一行,arr 是二维数组的数组名,arr就是第一行的地址。//数组传参,形参可以是数组,也可以是指针,数组写不写大小都可以。...

2022-08-15 16:34:50 149 5

原创 有序序列判断

数据范围: 3 \le n \le 50 \3≤n≤50 序列中的值都满足 1 \le val \le 100 \1≤val≤100。输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。输出为一行,如果序列有序输出sorted,否则输出unsorted。第二行输入N个整数,用空格分隔N个整数。第一行输入一个整数N(3≤N≤50)。...

2022-08-14 19:58:24 142

原创 整型数据在内存中的存储(超详细)

但是在C语言中除了8 bit的char之外,还有16 bit的short型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。这三种为计算机中整数的三种二进制表示方法,三种方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位正数的原、反、补码都相同。地址中,即 0x0011 中。,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址。.

2022-08-10 16:56:00 1720 4

原创 指针详解(一)

一、初识指针1.指针是什么? 指针就是地址,口语中说的指针通常是指针变量。(可以简单理解为:内存) 2.指针变量:用来存放地址(存放在指针中的值都被当作地址处理)3. 指针的大小: 我们根据代码可以知道,无论是什么类型,大小都是4个字节(注:如果是64 位机器,大小都是8个字节,一般使用的是32位机器)4.解引用(间接引用)把一个变量存入一个地址里,那么该如何取出来呢?这时,就得用到解引用操作符“*”,代码如下同时也可以通过解引用改变a的值 二、指针类型的意义1.首先访问到a的地址我们可以

2022-08-06 11:40:39 404 4

空空如也

空空如也

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

TA关注的人

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