2018/01/30 我们可以在什么地方创建对象? 全局变量区
Person p;
栈
void Max() { Person p; }
堆 new 和 delete
//在堆中创建对象: Person* p = new Person(); //释放对象占用的内存 delete p;
在堆中创建对象: new``delete 在C语言中我们使用malloc申请堆空间
使用完毕后使用free释放空间
C++:
class Person { private: int x; int y; public: Person() { printf("Person()执行了! \n"); } Person(int x,int y) …
2018/01/30 好的编程习惯 -定义和实现分开 代码会有更好的可读性 但不是必须的 在头文件中只留下声明代码
Test.h
struct sclass { int x; int y; int Bigger(int x,int y); int Max(int x,int y,int z); }; Test.cpp
int sclass::Bigger(int x,int y) { if(x>y) { return x; } else { return y; } } int sclass::Max(int x,int y,int z) { return Bigger(Bigger(x,y),z); } 使用: …
2018/01/28 什么是继承 struct Person { int age; int sex; }; struct Teacher { int age; int sex; int level; int classId; }; struct Teacher:Person { int level; int classId; }; 总结:
1、什么是继承?
继承就是数据的复制
2、为什么要用继承?
减少重复代码的编写
3、Person 称为父类或者基类
4、Teacher称为子类或者派生类
继承不仅仅局限于父类 struct X { int a; int b; }; struct Y:X { int c; int …
2018/01/28 什么是构造函数 #include "stdafx.h" #include struct Sclass { int a; int b; int c; int d; Sclass()//构造函数 { printf("观察这个函数 \n"); } Sclass(int a,int b,int c,int d)//构造函数 { this->a=a; this->b=b; this->c=c; this->d=d; printf("观察这个函数 2\n"); } int Plus() { return a+b+c+d; } }; int main(int argc, char* argv[]) { …
2018/01/27 什么是预处理 预处理一般是指在程序源代码被转换为二进制代码之前,由预处理器对程序源代码文本进行处理,处理后的结果再由编译器进一步编译。
预处理功能主要包括宏定义,文件包含,条件编译三部分
宏定义 简单宏: #define 标识符 字符序列 #define FALSE 0 #define NAME "LUODAOYI" #define __IN #define __OUT //极端例子 #define NAME "LUODAOYI" #define A int method() { #define B char buffer[0x10]; #define C …
2018/01/25 实现思想 :通过指针把要元素串起来 简单结构图 struct Student { char name[10]; int score; } struct Node { Student Element; Node* next; } 每一个节点包含此节点信息和下一个节点的指针
有点:插入删除方便
缺点:查找麻烦
基本元素实现 //方法/函数 int InitList();//初始化链表 int IsEmpty(); //判断链表是否为空 空返回1 非空0 void Clear(Node* p); //清空链表 ini Find(int Index,Student* element); //根据索引获 …
2018/01/21 封装 C语言和C++语言的区别 C++是对C的补充扩展,C原有的语法C++都支持,并在此基础上扩展了一些新的语法:
继承、封装、多态、模板等等
结构体可以作为参数传递吗 struct Student { int a; int b; int c; int d; } //分析这个函数是如何传递参数的 int Plus(student s) { return s.a+s.b+s.c+s.d; } 23: Student s = {1,2,3,4}; 00401078 mov dword ptr [ebp-10h],1 0040107F mov dword ptr [ebp-0Ch],2 …
2018/01/20 函数调用约定 就是告诉编译器:怎么传递参数,怎么传递返回值,怎么平衡堆栈
int method(int x,int y) { return x+y; } //调用 method(1,2); 常见的几种调用约定: 调用约定 参数压栈顺序 平衡堆栈 __cdecl 从右至左入栈 调用者清理栈 __stdcall 从右至左入栈 自身清理堆栈 __fastcall ECX/EDX 传送前两个,剩下:从右至左入栈 自身清理堆栈 int __stdcall method(int x,int y) { return x+y; } //调用 method(1,2); //观察反汇编堆栈变化 PS:一般情况下自 …
2018/01/18 指针数组的定义 char arr[10]; //10 char char* arr[10]; //10 指针(char*) Point* arr[10]; //10 指针(Point*) int******** arr[10]; 指针数组的赋值 char* a = "Hello"; char* b = "World"; //方式1: char* arr[2]= {a,b}; //方式2: char* arr[2]; arr[0]=a; arr[1]=b; 结构体指针数组 struct Point { int x; int y; } Point p; //8字节 一个结构体 Point …
2018/01/17 探测结构体指针的特性 struct Point { int x; int y; } ++、– 加法与减法 指针相减 使用结构体指针 //创建结构体 Point p; p.x=10; p.y=20; //声明结构体指针 Point* ps; //为结构体指针赋值 ps = &p; //通过指针读取数据 printf("%d \n",ps->x); //通过指针修改数据 ps->y=100; printf("%d\n",ps=>y); 结构体指针一定要指向结构体吗? struct Point { int x; int y; } int arr[10]={1,2,3,4,5,6,7,8,9,10} …
2018/01/17 一级指针和多级指针 int i =100; int* p1 = &i; int** p2 = &p1; int*** p3 = &p2; int**** p4 = &p3; int***** p5 = &p4 int****** p6 = &p5; int******* p7 = &p6; int****** px1 = *(p7); int***** px2 = *(px1); int**** px3 = *(px2); int*** px4 = *(px3); int** px5 = *(px4); int* px6 = *(px5); int px7 = *(px6); int px7 …
2018/01/15 字符串的几种表示方式有什么区别? char str[6] = {"A","B","C","D","E","F"}; //"\0" 或者0 --堆栈中 局部变量 char str[] = "ABCDE"; //编译器末尾填0 常量区 char* str= "ABCDE"; //常量区 //打印 printf("%s \n",str); //字符串打印时 遇到 0 才会停止 常用的字符串函数 1、int strlen(char* s) 返回值是字符串S的长度,不包括结束符"/0" 弊端:字符串中英文混合的话。返回的长度有问题,因为中文占用两个字节 2、char* strcpy(char* …
2018/01/14 基本类型参数传递 int x =1; void plus(int p) { p = p+1; } printf("%d \n",x); //x的值是多少? 数组作为参数 编写一个函数,能够打印任意整形数组的值
void PrintArray(int arr[],int nLength) {
2018/01/12 “*”的几种用途 乘法运算符
int x = 1; int y = 2; int z = x * y;
定义新的类型
char x; char* x;
取值运算符
指针类型的变量 int* a =(int*)1; printf("%x \n",(a +1)); 10: int a =(int*)1; 00401028 mov dword ptr [ebp-4],1 11: printf("%x \n",*(a +1)); 0040102F mov eax,dword ptr [ebp-4] 00401032 mov ecx,dword ptr [eax+4] 00401035 push ecx …
2018/01/12 &符号是取地址符,任何变量都可以使用&来获取地址,但不能用在常量上
struct Point { int x; int y; }; char a; short b; int c; Point p; printf("%p %p %p %p \n",&a,&b,&c,&p); printf("%x %x %x %x \n",&a,&b,&c,&p); printf("%x \n",&10); 16: char a; 17: short b; 18: int c; 19: Point p; 20: 21: printf("%p %p %p %p \n",&a,&b,&c,&p); 0040D408 …
2018/01/10 C语言14 指针类型 指针是C语言中的一种数据类型,
定义带 *类型的变量 char x; char* x; short y; short* y; int z; int* z; float f; float* f; double d; double* d; Student st; Student* st; 总结:
任何带有*的变量类型的标准写法:变量类型* 变量名 任何类型都可以带* 加上* 以后是新的类型,统称为“指针类型” *可以使任意多个。 指针变量赋值 char* x; char*** x; char******* x; short* ~~ int* ~~ Student* ~~ x …
2018/01/10 官方教程有问题
这里总结下,省的下次又不会配了
配置 ipv6 block 打开 https://console.online.net/en/network/ 创建子网
配置 仓储地址 编辑 sources.list
sudo vim /etc/apt/sources.list 在末尾增加dhcp6的源地址
#DHCP6 Client deb http://httpredir.debian.org/debian experimental main 然后创建 apt 偏好文件
sudo vim /etc/apt/apt.conf.d/99defaultrelease 这里 14.04填写 …
2018/01/08 上周又遇到了坑爹问题,具体表现为 服务端接口全部调用失败。
排查日志发现,有大量的 错误日志为
System.Net.Http.HttpRequestException: 发送请求时出错。 ---> System.Net.WebException: 无法连接到远程服务器 ---> System.Net.Sockets.SocketException: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 xxxxx.xx:6666 在 System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult) 在 …
2018/01/07 分析结构体大小 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 struct S1 { char c1; double d; char c2; char c3; }; struct S2 { char c1; char c2; char c3; double d; }; struct S3 { char c1; S1 s; char c2; char c3; }; 分析结构体大小 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #pragma pack(1) struct S1 { char …
2018/01/07 结构体数组的定义 类型 变量名[常量表达式]; //定义结构体类型 struct stStudent { int Age; int Level; } //定义结构体变量 struct stStudent st; //定义结构体数组 struct stStudent arr[10]; //或者 stStudent arr[10]; 结构体数组初始化 struct stStudent{ int Age; int Level; }; struct stStudent arr[5] = {{0,0},{1,1},{2,2},{3,3},{4,4}}; //或者 arr[0].Age=100; …