
C/C++小知识点
贪心的葡萄
算法与数据结构,计算智能,进化计算,神经网络,C/C ,linux,python,matlab
展开
-
实现字符串函数strlen、strcpy、strcat、strstr、strcmp和内存函数memcopy、memmove
实现字符串函数strlen、strcpy、strcat、strstr、strcmp和内存函数memcopy、memmovenamespace 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 · 617 阅读 · 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 · 510 阅读 · 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); //ffffe0a0printf("%x\n", &arr); //ffffe0a0printf("%x\n", arr + 1); //ffffe0b4printf("%x\原创 2022-03-16 17:56:44 · 375 阅读 · 0 评论 -
虚基类:解决菱形继承导致的子对象重叠问题
虚基类:解决菱形继承导致的子对象重叠问题考虑如图所示的菱形继承。A和B继承了Base,分别重写show()方法。Child又继承了A和B。产生的问题及解决方案如下:Child调用show()时会产生二义性。(解决方案:重写/重载show()方法)Child继承的A和B中各自包含一份Base,菱形继承导致子对象重叠,增加了额外的空间开销。(解决方案:虚基类)...原创 2022-03-15 21:32:56 · 321 阅读 · 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 · 2090 阅读 · 3 评论 -
指针悬挂问题
指针悬挂问题如果一个类中存在指针,则不能简单的将一个对象赋值给另一个对象,否则可能会造成指针悬挂问题。原因:类中默认的赋值运算符函数采用的是位拷贝。解释:如对象p1和p2,执行p2=p1时,p1和p2中的指针成员变量都指向了同一块空间。生命周期结束时调用两次析构函数,而指针成员变量只有一块空间,释放一次后,另一个指针所指空间就不存在了,从而导致指针悬挂。解决方案:赋值运算符重载。扩展:当类中含有指针数据成员时,使用默认的构造函数、拷贝构造函数、默认赋值函数就可能造成指针悬挂问题。...原创 2022-03-14 20:54:43 · 1380 阅读 · 0 评论 -
指针与引用的区别
指针与引用的区别指针通过变量地址间接访问变量;引用通过变量的别名直接访问变量。(访问方式)指针可以在任何时候被初始化;引用创建时必须初始化。(初始化方式)指针可以在任何时候被修改指向其他对象;引用一旦被初始化指向一个对象就不能改变为另一个对象的引用。(可修改性)空指针合法;空引用非法。(空合法性)...原创 2022-03-11 10:39:23 · 341 阅读 · 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 · 303 阅读 · 0 评论 -
inline内联函数
inline内联函数类内定义的成员函数默认为内联函数类外给出函数体的成员函数必须加inline内联函数可以像宏一样展开,没有调用时的开销。空间换时间。原创 2022-03-09 21:52:01 · 156 阅读 · 0 评论 -
extern的使用
extern的使用extern的使用:用于引用其他cc文件中已定义的变量/函数。只用在本cc文件中做extern声明。编译命令g++ a.cpp b.cpp -o aa.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 · 271 阅读 · 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 · 510 阅读 · 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 · 429 阅读 · 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 · 428 阅读 · 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 · 455 阅读 · 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 · 699 阅读 · 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 · 225 阅读 · 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 · 316 阅读 · 0 评论