C/C++
C/C++
木石_m
木石的博客
展开
-
[C++] 重载new和delete
1、new和delete表达式的工作机理1)new表达式实际执行了三步string *sp=new string(“aaaa”);string *arr=new string[10];//string采用默认初始化a、调用一个名为operator new(或者operator new[])的标准库函数,分配一块足够大的、原始的、未命名的内存空间,来准备存储对象或者对象的数组;b、编译器运行相应的构造函数构造这些对象,在这里运行的是string的构造函数;c、返回一个指向该对象或者对象数组的指转载 2021-11-29 22:52:16 · 219 阅读 · 0 评论 -
拷贝构造函数调用时机
C++中拷贝构造函数调用时机通常有三种情况使用一个已经创建完毕的对象来初始化一个新对象值传递的方式给函数参数传值以值方式返回局部对象class Person {public: Person() { cout << "无参构造函数!" << endl; mAge = 0; } Person(int age) { cout << "有参构造函数!" << endl; mAge = age; } Person(const Pe原创 2021-08-09 20:41:57 · 420 阅读 · 0 评论 -
const修饰类成员函数
常函数成员函数后加const后我们称为这个函数为常函数常函数中不可以修改成员属性成员属性声明时加关键字mutable后,在常函数中依然可以修改class Person{ public: //this指针的本质 是指针常量 指针指向的位置不可改变 //在成员函数后面加const,修饰的是this指向,让指针指向的值也不可修改 等于 (const Person * const this;) void showPerson() const{ //this->A = 100;原创 2021-05-13 10:03:04 · 233 阅读 · 0 评论 -
三种构造函数的初始化方法
直接上代码 ↓↓↓↓class Person{ public: Person(){ cout << "Person的构造函数的调用" <<endl; } Person(int a){ age = a; cout << "Person有参构造" << endl; } //拷贝构造函数 Person(const Person &p){ age = p.age; cout << "Per原创 2021-05-11 22:12:40 · 1258 阅读 · 0 评论 -
const修饰指针
const修饰指针常量指针 const int p1 = &a可以改变指针指向的地址,但不可以改变指针指向地址的值;指针常量 int * const p2 = &a可以改变指针指向地址的值,但不可以改变指针指向的地址const既修饰指针也修饰常量 const int const p3 = &a既不可以改变指针指向地址的值,也不可以改变指针指向的地址一段代码示例(读者可自行摘取运行):#include <iostream>usi原创 2021-05-06 22:18:41 · 82 阅读 · 0 评论 -
fopen函数的各种参数 r+ w+ a+ ab+
文件mode参数函数 : FILE *fopen(const char * path,const char * mode);const char * mode具有以下参数:r :打开只读文件,该文件必须存在。w :打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。a :以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。rb :打开一个二进制文件,只允许读取操作wb :打开(创建)一个二原创 2021-04-25 21:13:40 · 9641 阅读 · 0 评论 -
无头链表有序插入
无头链表有序插入#include <stdio.h>#include <stdlib.h>typedef struct list { int num; struct list *pNext;}Node,*pNode;//有序插入void listInsertSort(pNode * pHead, pNode* pTail, int value) { pNode pNew = (pNode)calloc(1, sizeof(Node));//申请空间,自带mems原创 2021-04-19 21:48:10 · 149 阅读 · 0 评论 -
一文看懂一级指针与二级指针
一文看懂一级指针与二级指针指针即是指向一个变量地址的变量,把它当作普通的变量来看,只是定义指针的写法与普通变量不同,加了个 * 。那么我们就从有 * 和无 * 来理解。int a = 1;int *p; //int *p = &a;p = &a;printf("*p=%d\n",*p);初始化指针变量有两种方法,先定义(int *p),然后再赋值(p = &a),* 号只是表明定义了一个指针型的变量,再使用 p 的时候,p表示的是地址——定义指针变量的时候有 * ,原创 2021-04-12 08:05:20 · 225 阅读 · 0 评论 -
指针与数组小例
指针与数组一个数组名指向的即是这个数组的首地址,那么将数组名赋给一个指针变量,就可以用指针来操作数组的内容,那么来看一个栗子,了解一下指针如何来改变数组中的值。#include <stdio.h>#include <stdlib.h>int main() { int a[3] = { 1,3,5 }; int *p = a; //定义一个指针变量,将数组a的首地址传给p int j; j = *p++; //可分解为j=*p,*p++ printf("a[0]=原创 2021-04-08 22:44:48 · 117 阅读 · 0 评论 -
字符串输入输出总结
类型注意事项作用返回值用法%s遇到空格会结束!!!!会忽略’\n’输入字符串-------scanf("%s",s)%c会读取输入的 ‘\n’,读取空格输入字符-------scanf("%c",c)getchar()输入 ‘\n’,空格有效获取字符EOFc=getchar()putchar()会输出缓冲区的 ‘\n’,读取空格输出字符EOFputchar©gets()输入’\n’无效,空格有效,会进入缓冲区输入一行字符串...原创 2021-04-02 10:35:00 · 151 阅读 · 0 评论 -
字母小写转大写简单实例,getchar()原理和fflush(stdin)
先来看一段代码#include <stdio.h>#include <stdlib.h>int main(){ char c; while((c=getchar()) !=EOF){ printf("%c\n",c-32); } system("pause"); return 0;}此时我们可以输入多个字符,键盘输入的字符都会存到缓冲区,getchar()会先从缓冲区读取内容,所以当输入多个字符时,条件成立,get原创 2021-03-31 14:33:55 · 764 阅读 · 0 评论 -
了解scanf缓冲区
scanf缓冲区在学习scanf之前,先来了解以下“缓冲区”这个概念。我们从键盘输入的都是字符,scanf中的“%d”会将从键盘中输入的字符转换为整型,其它类型亦如此。当我们从键盘输入时,数据会先存入缓冲区。但是!当我们输入一个整型数字时,会用回车来结束,那么回车这个按键也会留在缓冲区,对应的时 ‘\n’ 。了解这一点,然后我们来看一个栗子。#include <stdio.h>#include <stdlib.h>int main() { int m; char c;原创 2021-03-30 20:44:56 · 996 阅读 · 0 评论 -
浮点型详解
整型数据类型所占字节表示范围(singned)int4-2312^{31}231 ——2312^{31}231-1(singned)short2-2152^{15}215 ——2152^{15}215-1(singned)long4(64位为8字节)-2632^{63}263 ——2632^{63}263-1unsigned int40——2322^{32}232-1unsigned short20——65535unsigned lo原创 2021-03-29 22:12:02 · 3620 阅读 · 0 评论