C++
Kyda
行于思
展开
-
c++内存分区模型
程序在运行的过程中是会被加载到内存中的,一个程序可能会执行可能会存在不同的功能块,所以不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程C++的程序会在内存中分为四大块:代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作...原创 2020-02-25 23:46:28 · 415 阅读 · 0 评论 -
C++中赋值运算或者表达式返回值是引用
本文来自c++为什么表达式会产生引用? 。侵删赋值会产生引用”的含义是,赋值表达式的返回值是引用类型。这里包含两个问题首先,赋值表达式为什么要有返回值呢?为了支持链式的复制表达式!int a,b;a = b = 1;// 等号运算符是右结合的,相当于:a = (b = 1);其实是把b=1的返回值赋给了a,所以赋值表达式要有返回值。为什么不返回值,而是返回引用呢?为了...原创 2020-02-21 20:48:13 · 1859 阅读 · 0 评论 -
指针数组和数组指针
指针数组和数组指针先看两者之间的定义int *p1[5]; //指针数组int (*p2)[5]; //数组指针经常有人把两者搞混。我们可以使用符号的优先级来帮助我们理解。在上面第一行代码中。[]的优先级高于*号,所以p1首先是数组,而类型是(int *)也就是一个存放指针的数组。而第二行()的优先级高于[],所以优先申明这是一个指针,然后指向一个大小为5的int数组,5也可...原创 2019-12-02 22:09:57 · 195 阅读 · 0 评论 -
良好的编程习惯
最近,看到一些编程技巧有意无意的去使用,然而这些技巧看起来很华丽,但有碍于良好的编程习惯。比如在输出一个数组时,可以有以下两种写法:for (int i = 0; i < len; ++i) //良好的习惯 cout << arr[i] << endl;for (int i = 0; i 虽然第二个看起来更加简洁,如果一直使用这些技巧的话,对于一些新手来说看懂这些是代码有点原创 2017-05-13 12:13:32 · 2040 阅读 · 0 评论 -
c++指针的一些陷阱(更新ing)
C++的指针真的是有很多陷阱啊。我会在这篇文章中不断的总结一些指针使用出现的陷阱。1.类成员指针陷阱。类成员指向成员函数的局部变量。在给成员指针赋值的时候,容易将指针指向局部变量,局部变量在函数执行结束时会销毁,由于指针指向的是一个地址,所以但函数结束时指针会指向一个不存在的地址,这是我们的程序就会出现问题了。可以看看下面理解。#includeusing namespace原创 2017-04-06 23:42:49 · 525 阅读 · 0 评论 -
通讯录1(链表储存版,可保存)
用数组来写通讯录有一个问题就是得事先设定好通讯录的容量。所以,改用链表来储存通讯录,这样节省了内存空间。#pragma once#includeusing namespace std;typedef struct LNode { char *name; char *sex; char *age; char *tel_number; struct LNode *next;原创 2017-04-04 16:05:25 · 375 阅读 · 0 评论 -
const关键字的几种常用用法
在C++中,const关键字有着举足轻重的位置。善用const可以为我们在编程过程中减少不必要的麻烦。/*const是一个常量关键字,主要是为了防止所修饰对象被修改。我们在定义一个变量时,如果想要防止这个变量被修改,可以用const来修饰这个变量。也就是说,被const修饰过的变量或者函数,不能对其进行修改,否则,编译器就会报错*//*用与修饰全局变量*/#define PI原创 2017-04-01 17:31:04 · 7787 阅读 · 1 评论 -
虚析构函数的作用
析构函数的作用就在于我们调用完一个类对象时,为了避免内存泄漏,我们必须删除这个类对象,这时析构函数就派上用场了。但是,当我我们定义一个基类指针指向派生类后,再删除这个指针时我们会发现,程序只是调用了基类的析构函数,却没有调用派生类的析构函数。为了解决这个问题,虚析构函数闪亮登场!当!当!当!虚析构函数只是在析构函数前面加上了一个virtual而已,下面,我们通过程序来理解下,过程吧。原创 2017-03-11 23:06:08 · 652 阅读 · 0 评论 -
C++中template(模版)的使用
我们在编程的时候总是会遇到一些类似的模块,只是模块中的形参的数据类型不同,导致我们要不断的去更改模块的。这里就涉及到重载的知识点了。例如以下的几种情况://函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.float max( float x,float y){return (x>y)? x:y ;}//函数3.double原创 2017-03-02 20:10:27 · 1112 阅读 · 0 评论 -
C文件流
转自:http://blog.csdn.net/zhuyi2654715/article/details/75530391 C文件操作在ANSI C中,对文件的操作分为两种方式,即:ü 流式文件操作ü I/O文件操作1.1 流式文件操作这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: 以下是引用片段:typed转载 2017-03-11 12:50:32 · 918 阅读 · 0 评论 -
头文件为什么要加#ifndef #define #endif
#ifndef在头文件中的作用在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量“重定义”的错误。在头文件中实用#ifndef #define #endif能避免头文件的重定义。方法:例如要编写头文件test.h在头文件开头写上两行:#ifndef _TEST_H#define _TEST_H//一般是文件名的大写转载 2017-03-02 18:46:23 · 1078 阅读 · 0 评论