C/C++小知识点
贪心的葡萄
算法与数据结构,计算智能,进化计算,神经网络,C/C ,linux,python,matlab
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
实现字符串函数strlen、strcpy、strcat、strstr、strcmp和内存函数memcopy、memmove
实现字符串函数strlen、strcpy、strcat、strstr、strcmp和内存函数memcopy、memmove namespace selfstd { int strlen(const char *); char *strcpy(char *, const char *); char *strcat(char *, const char *); char *strstr(const char *, const char *); int strcmp(con原创 2022-03-17 20:47:35 · 658 阅读 · 0 评论 -
回调函数、函数指针、函数指针数组、指向函数指针数组的指针
回调函数、函数指针、函数指针数组、指向函数指针数组的指针 回调函数:通过函数指针调用的函数。事件发生时由另一方调用,用于对事件的响应。 以下列两个函数为例: double add(double x, double y) { return x + y; } double sub(double x, double y) { return x - y; } 函数指针:指向函数的指针 typedef double (*func_ptr)(double, double); void prin原创 2022-03-16 20:37:21 · 528 阅读 · 0 评论 -
数组指针、指针数组、二级指针
数组指针、指针数组、二级指针 存在二维数组: int arr[3][5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; arr:指向数组首元素地址 &arr:指向数组地址 printf("%x\n", arr); //ffffe0a0 printf("%x\n", &arr); //ffffe0a0 printf("%x\n", arr + 1); //ffffe0b4 printf("%x\原创 2022-03-16 17:56:44 · 400 阅读 · 0 评论 -
虚基类:解决菱形继承导致的子对象重叠问题
虚基类:解决菱形继承导致的子对象重叠问题 考虑如图所示的菱形继承。 A和B继承了Base,分别重写show()方法。Child又继承了A和B。产生的问题及解决方案如下: Child调用show()时会产生二义性。(解决方案:重写/重载show()方法) Child继承的A和B中各自包含一份Base,菱形继承导致子对象重叠,增加了额外的空间开销。(解决方案:虚基类) ...原创 2022-03-15 21:32:56 · 345 阅读 · 0 评论 -
静态绑定与动态绑定
静态绑定与动态绑定 静态绑定:编译阶段完成。成员函数重载以及派生类对基类的重载就是静态绑定。发生调用时由参数类型决定,与指向对像无关。 class static_binding { public: void play() { printf("static_binding play()\n"); } }; class static_binding_child : public static_binding { public: void play()原创 2022-03-15 20:41:38 · 2132 阅读 · 3 评论 -
指针悬挂问题
指针悬挂问题 如果一个类中存在指针,则不能简单的将一个对象赋值给另一个对象,否则可能会造成指针悬挂问题。 原因:类中默认的赋值运算符函数采用的是位拷贝。 解释:如对象p1和p2,执行p2=p1时,p1和p2中的指针成员变量都指向了同一块空间。生命周期结束时调用两次析构函数,而指针成员变量只有一块空间,释放一次后,另一个指针所指空间就不存在了,从而导致指针悬挂。 解决方案:赋值运算符重载。 扩展:当类中含有指针数据成员时,使用默认的构造函数、拷贝构造函数、默认赋值函数就可能造成指针悬挂问题。 ...原创 2022-03-14 20:54:43 · 1440 阅读 · 0 评论 -
指针与引用的区别
指针与引用的区别 指针通过变量地址间接访问变量;引用通过变量的别名直接访问变量。(访问方式) 指针可以在任何时候被初始化;引用创建时必须初始化。(初始化方式) 指针可以在任何时候被修改指向其他对象;引用一旦被初始化指向一个对象就不能改变为另一个对象的引用。(可修改性) 空指针合法;空引用非法。(空合法性) ...原创 2022-03-11 10:39:23 · 360 阅读 · 0 评论 -
const与指针
const与指针 指向常量的指针 指向常量的指针const type* ptr可指向常量、变量。ptr是一个指向const type类型的指针变量。 注:ptr可修改(指向其他地址)。 int val = 10; const int tmp = 20; const int *q = &val; q = &tmp; //合法 常指针 常指针type *const ptr只能指向变量。 注:ptr不可修改(不能指向其他地址)。 int val = 10, tmp = 20; int *原创 2022-03-10 21:34:10 · 338 阅读 · 0 评论 -
inline内联函数
inline内联函数 类内定义的成员函数默认为内联函数 类外给出函数体的成员函数必须加inline 内联函数可以像宏一样展开,没有调用时的开销。空间换时间。原创 2022-03-09 21:52:01 · 182 阅读 · 0 评论 -
extern的使用
extern的使用 extern的使用:用于引用其他cc文件中已定义的变量/函数。只用在本cc文件中做extern声明。 编译命令 g++ a.cpp b.cpp -o a a.cpp #include<iostream> using namespace std; extern int v_global; extern void reset_v_global(int _v_global); extern void extfunc(); int main() { extfunc();原创 2022-03-09 21:46:26 · 307 阅读 · 0 评论 -
C/C++小知识点:堆排序及解题案例
C/C++小知识点:堆排序 堆排序函数的基本用法 大顶堆:升序排列(前K大用大顶堆) 小顶堆:降序排列(前K小用小顶堆) #include <stdio.h> #include <vector> #include <math.h> #include <algorithm> #include <functional> //必须引用这个头文件,否则heap函数第三个参数无法使用 template <typename T> bool原创 2021-12-11 20:36:54 · 543 阅读 · 0 评论 -
C/C++小知识点:优先级队列及解题案例
C/C++小知识点:优先级队列 #include <stdio.h> #include <math.h> #include <vector> #include <queue> template <typename T> struct comp { bool operator()(const T& elem1, const T& elem2) const { return (abs(elem1) &g原创 2021-12-11 19:25:45 · 458 阅读 · 0 评论 -
C/C++小知识点:快排函数qsort与函数指针
C/C++小知识点:快排函数qsort与函数指针 快排函数qsort的用法 函数指针的用法 #include <stdio.h> #include <stdlib.h> int compRule(const void* elem1, const void* elem2) { return (*(int *)elem1 - *(int *)elem2); } void printarray(const void* array, const int& size)原创 2021-12-11 18:45:29 · 456 阅读 · 0 评论 -
C/C++小知识点:快慢指针
C/C++小知识点:快慢指针 可用于解决需要寻找单链表中点的问题。 /* struct definition */ struct ListNode { int val; struct ListNode *next; }; /* fast-slow pointer */ struct ListNode* findMiddleOfList(struct ListNode* head, struct ListNode* tail) { struct ListNode * slowptr原创 2021-12-09 16:59:52 · 490 阅读 · 0 评论 -
C/C++小知识点:大小端存储模式
C/C++小知识点:大小端存储模式 大端:数据高位保存在低地址,数据低位保存在高地址 小端:数据高位保存在高地址,数据低位保存在低地址 #include <stdio.h> void func_method_1() { int i = 1; int j = (*(char *)&i); if (j == 1) puts("小端"); else puts("大端"); } void func_method_2()原创 2021-12-03 11:03:04 · 742 阅读 · 0 评论 -
C/C++小知识点:结构体和联合体
C/C++小知识点:结构体和联合体 结构体:偏移量字节对齐 联合体:公用内存空间 #include <stdio.h> typedef struct struct_test { int i; //4 offset:4 char ch; //1 offset:8 float f; //4 offset:12 char * c; //8 of原创 2021-12-03 10:00:26 · 252 阅读 · 0 评论 -
C/C++小知识点:柔性数组
C/C++小知识点:柔性数组 一个未知大小的数组 结构中柔性数组成员前必须至少一个其他成员 sizeof()返回的结构大小不包含柔性数组内存 用malloc()动态分配内存应大于结构大小且适应柔性数组预期大小 #include <stdio.h> #include <stdlib.h> typedef struct flexArray { int size; int farr[]; }flexArray; int main() { flexArray原创 2021-12-02 21:48:30 · 346 阅读 · 0 评论
分享