![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++进阶
文章平均质量分 52
C/C++进阶
张_0
这个作者很懒,什么都没留下…
展开
-
类的const成员初始化
类的const成员初始化class CExample{public: CExample() : m_a( 1 ), m_b( 2 ) { /*m_a = 1; compile error*/ } ~CExample() { }private: const int m_a; //or const int m_a=1;(C++11后支持) int m_b;};总结:对于const变量,在类内声明必须初始化。(1)类的const成员变量必须在构造函数的参数原创 2021-07-15 11:42:53 · 2024 阅读 · 0 评论 -
C/C++小知识 日常更新
1、 “->” 是和指针连用的 也就是“->”前面是一个内存地址 比如this指针用于结构体取出结构体中的数据和取类中数据class student{public: string name[20];}student *xy;//访问时需要写成 *xy.name="hhhhh";等价于 xy->name="hhhhh"。student xy;//访问时需要写成 xy.name="hhhhh"2、“[ ]”表示取地址中的值 “[ ]”中可以+数字来偏移 i原创 2020-05-21 09:45:52 · 129 阅读 · 0 评论 -
一道关于指针的题
void foobar(int a, int *b, int **c){ int *p = &a; *p = 101; *c = b; b = p;} int main(){ int a = 1; int b = 2; int c = 3; int *p = &c; foobar(a, &b, &p); printf("a=%d, b=%d, c=%d, *p=%d\n", a, b,原创 2020-06-16 20:12:10 · 261 阅读 · 1 评论 -
windows下socket编程(单用户)c++
服务端#include<WinSock2.h>#include<iostream>#include <Ws2tcpip.h>#pragma comment(lib,"ws2_32.lib")using namespace std;int main() { //请求版本 WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); if (HIBYTE(wsaData.wVersion) != 2原创 2020-05-26 12:02:56 · 164 阅读 · 0 评论 -
scanf的安全问题-待完善
昨天在csdn中看见一道题目 又看了解析 后面发现这道题其实很不严谨这道题存在数组越界问题 name数组只分配了4个字节的内存 但输入abcdefg却有7个字节首先我们需要知道先让我们运行一下64位编译器下解析:连续定义的变量,内存地址一般也相邻,所以我们在这只考虑一般情况。32位编译器下...原创 2020-05-23 19:44:02 · 203 阅读 · 0 评论 -
深层复制与浅层复制的实现思路
浅层赋值将pintsarray类中points size动态分配空间时候 使用系统自带的复制函数 将出现以下情况浅层复制释放空间时候,释放完一个变量后如delete pointsarray1;pintsarray2的points size指针将找不到对应的内存地址将无法访问;而且再次释放pointsarray2将会报错。深层复制所以我们必须重写复制构造函数 实现以下图解我们只需在复制构造函数中给points size指针重新分配空间 然后再将被复制对象的*points size给this-&g原创 2020-05-21 12:42:34 · 179 阅读 · 0 评论 -
栈空间与堆空间等存储区域
1、栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。 其操作方式类似于数据结构中的栈。2、堆区(heap) — 在内存开辟另一块存储区域。 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。 如:c中malloc和c++中new 注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)—编译器编译时即分配内存。 全局变量和静态变量的存储是放在一块的, 初始化的全局变量和.原创 2020-05-20 13:36:30 · 526 阅读 · 0 评论 -
指向函数的指针——函数指针
函数指针的好处主要是实现函数回调回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。列子#include<iostream>using namespace std;int compute(int x,int y,int(*function)(int,int)) { ret原创 2020-05-18 09:40:36 · 153 阅读 · 0 评论 -
c++编码(IEEE 754)以及浮点数比较问题
C/C++中非常重要的原则:The important rule to remember is that powers of two and integer multiples thereof can be perfectly represented. everything else is an approximation.除了可以表示为2的幂次以及整数数乘的浮点数可以准确表示外,其余的数的值都是近似值。例如,1.5可以精确表示,因为1.5 = 3*2^(-1);然而12.3却不能精确表示,因为它原创 2020-05-16 19:11:37 · 430 阅读 · 0 评论 -
C++函数中值的传递方式与实现原理分析
值传递、引用传递、指针传递#include<iostream>using namespace std;//值传递void change1(int n){cout<<"值传递--函数中n的地址"<<&n<<endl; //显示的是拷贝的地址而不是源地址n++;}//引用传递void change2(int & n){...原创 2020-05-02 17:27:01 · 564 阅读 · 0 评论 -
一级指针的定义与基本使用
为什么要用指针1、指针的使用使得不同区域的代码可以轻易的共享内存数据,这样可以使程序更为快速高效;2、C语言中一些复杂的数据结构往往需要使用指针来构建,如链表、二叉树等;3、C语言是传值调用,而有些操作传值调用是无法完成的,如通过被调函数修改调用函数的对象,但是这种操作可以由指针来完成,而且并不违背传值调用。注:在c中const常量能赋值给指针,但在c++中不能#include<s...原创 2020-05-01 14:00:48 · 463 阅读 · 0 评论