
C/C++
faihung
这个作者很懒,什么都没留下…
展开
-
C语言typedef的理解
C语言允许为一个数据类型起一个新的别名,就像给人起“绰号”一样。起别名的目的不是为了提高程序运行效率,而是为了编码方便。例如有一个结构体的名字是 stu,要想定义一个结构体变量就得这样写:struct stu stu1;struct 看起来就是多余的,但不写又会报错。如果为 struct stu 起了一个别名 STU,书写起来就简单了:STU stu1;这种写法更加原创 2017-03-23 22:14:47 · 1218 阅读 · 0 评论 -
C语言--库函数 - remove()
描述C 库函数int remove(const char *filename)删除给定的文件名filename,以便它不再被访问。声明下面是 remove() 函数的声明。int remove(const char *filename)参数filename-- 这是 C 字符串,包含了要被删除的文件名称。返回值如果成功,则返回零。如果错误,则返回 -1...转载 2018-03-13 22:16:38 · 4935 阅读 · 0 评论 -
C语言--进阶之内存陷阱
看看这段代码有什么问题?char *DoSomething(...){ char i[32*1024]; memset(i,0,32*1024); ... return i;}两个重大的问题:1. 临时变量是通过堆栈实现的,太大的临时变量数组会冲掉堆栈2. 返回堆栈中的地址是非常危险的,因为堆栈中的值永远是不确定的看看这段代码有什么问题?void DoSo...转载 2018-05-19 21:22:22 · 632 阅读 · 0 评论 -
C语言--进阶之结构体、联合、枚举、sizeof
1 结构体结构是由若干(可不同类型的)数据项组合而成的复合数据对象,这些数据项称为结构的成分或成员。(1)字段C语言的结构还提供了一种定义字段的机制,使人在需要时能把几个结构成员压缩到一个基本数据类型成员成员里存放,这可以看作是一种数据压缩表示方式。struct pack{ unsigned a:2; unsigned b:8; unsigned c:6;}pk1,pk2...转载 2018-05-20 19:37:56 · 1066 阅读 · 0 评论 -
C语言--函数指针的用法总结
一个函数在编译时被分配一个入口地址,这个入口地址就称为函数的指针。函数名代表函数的入口地址,这一点和数组一样。我们可以用一个指针变量来存放这个入口地址,然后通过该指针变量调用函数。如:假设有一个求两者较大的函数如下:int max(int x, int y);当我们调用这个函数时可以这样:int c;c max(a,b);这是通常调用方法,其实我们可以定义一个函数指针,通过指...原创 2018-05-15 21:54:22 · 21671 阅读 · 7 评论 -
C语言--返回指针值的函数
我们知道,一个函数可以带回一个整型值、字符值、实型值等,函数还可以带回一个指针型的数据,即地址。这种函数的定义形式如下:类型标识符 *函数名(参数表) 如:int *a(x,y)返回一个指向整型的指针使用这种函数的时候要注意:在调用时要先定义一个适当的指针来接收函数的返回值。这个适当的指针其类型应为函数返回指针所指向的类型。这样的函数比较难于理解,其实只要把它当做一般的函数来处理就容易...原创 2018-05-15 21:56:15 · 5061 阅读 · 0 评论 -
C语言--指针相关
指针数组指针数组无疑就是数组元素为指针,定义形式为:类型标识符 *数组名[数组长度]如:int *p[4],千万不要写成int(*p)[4],这是指向一维数组的指针变量。指针数组多用于存放若干个字符串的首地址,注意一点,定义指针数组时初始化,如下:static char *name[] = {"Li ji","Wang ha","He miao"};不要以为数组中存放的是字符串,...翻译 2018-05-15 22:19:30 · 222 阅读 · 0 评论 -
C语言--位运算相关
1. 概述所谓的位运算是进行二进制位的运算。在系统软件中,常要处理二进制位的问题。c提供的位运算符有:& 按位与| 按位或^ 按位异或~ 取反<< 左移>> 右移&对于将一个单元清零、取一个数中的某些指定位以及保留指定位有很大用途。|常用来将一个数的某些位置1.^判断两个位值,不同为1,相同为0.常用来特定...转载 2018-05-16 07:33:12 · 240 阅读 · 0 评论 -
C语言--结构体的4种初始化方式
//// main.c// C语言学习 #include <stdio.h> int main(int argc, const char * argv[]) { //定义结构体类型 struct Person { char *name; int age; double heigth;...转载 2018-07-18 16:31:53 · 942 阅读 · 0 评论 -
智能指针shared_ptr的用法
为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer)。智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈上的变量自动被销毁,智能指针内部保存的内存也就被释放掉了(除非将智能指针保存起来)。C++11提供了三种智能指针:std::shared_ptr, std::unique_ptr, std:...转载 2019-02-28 22:37:55 · 414 阅读 · 0 评论 -
虚函数和纯虚函数的区别
首先,强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。1. 简介假设我们有下面的类层次:class A{public: virtual void foo()...转载 2019-02-28 23:19:34 · 239 阅读 · 0 评论 -
c++中冒号(:)和双冒号(::)的用法
1.冒号(:)用法(1)表示机构内位域的定义(即该变量占几个bit空间)typedef struct _XXX{ unsigned char a:4; unsigned char c;} ; XXX(2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。struct _XXX{ _XXX() : y...转载 2019-02-26 22:58:10 · 355 阅读 · 0 评论 -
std::mutex 用法详解
Mutex 又称互斥量,C++ 11中与 Mutex 相关的类(包括锁类型)和函数都声明在 <mutex> 头文件中,所以如果你需要使用 std::mutex,就必须包含 <mutex> 头文件。<mutex> 头文件介绍Mutex 系列类(四种)std::mutex,最基本的 Mutex 类。 std::recursive_mutex,递归 ...转载 2019-03-11 23:10:41 · 66263 阅读 · 2 评论 -
C语言--memset结构体初始化
memset可以方便的清空一个结构类型的变量或数组。如: struct sample_struct { char csName[16]; int iSeq; int iType; };对于变量 struct sample_strcut stTest;一般情况下,清空stTest的方法:stTest.csName[0]='\0';st...转载 2019-05-30 22:21:16 · 21474 阅读 · 0 评论 -
C语言--指针一般在什么时候需要申请内存空间
1. 指针所指向的地址需要存放数据的时候需要申请空间。int *q;只有地址,没有内存空间。这个地址是随机地址。(1)没有申请内存空间:int *q;*q = 1;cout<<*q<<endl;错误! 指针变量q没有空间,不能直接存放数据。(2)申请内存空间:int *q = new int;*q = 1;cout<<*q...转载 2019-05-28 22:18:08 · 9140 阅读 · 1 评论 -
C语言--if…if…和if…else if的区别
if (条件1){ //语句1}if (条件2){ //语句2}这种格式中,程序会依次判断条件1和条件2是否成立并根据结果决定是否执行语句1和语句2,也就是说,第一个 if 块和第二个 if 块没有影响(除非在执行第一个 if 块的时候就凶残地 return 了)而下面这种格式:if (条件1) { //语句1}else if (条件...原创 2019-05-28 23:02:59 · 8846 阅读 · 5 评论 -
C语言--详解sizeof
一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等,它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法 1、用于数据类型 sizeof使用形式: sizeof(type)...转载 2018-03-12 22:31:36 · 602 阅读 · 0 评论 -
C语言--“.”与“->”有什么区别?
这虽然是个小问题,但有时候很容易让人迷惑,因为有的时候用混淆了,程序编译不通过。下面说说我对它们的理解。一般情况下用“.”,只需要声明一个结构体。格式是,结构体类型名+结构体名。然后用结构体名加“.”加域名就可以引用域 了。因为自动分配了结构体的内存。如同 int a;一样。而用“->”,则要声明一个结构体的指针,还要手动开辟一个该结构体的内存,然后把返回的指针...原创 2018-01-28 22:12:25 · 71949 阅读 · 18 评论 -
C语言--bool型变量问题详解
环境linux下GCC编译器#include<stdio.h>#include<stdbool.h>#include<string.h>intmain(void){boola,b,c,d,e;a=true;b=false;c=0;d=1;...转载 2017-12-06 13:26:14 · 5360 阅读 · 1 评论 -
C语言--typedef 和 #define 的区别
typedef 在表现上有时候类似于 #define,但它和宏替换之间存在一个关键性的区别。正确思考这个问题的方法就是把 typedef 看成一种彻底的“封装”类型,声明之后不能再往里面增加别的东西。1.可以使用其他类型说明符对宏类型名进行扩展,但对 typedef 所定义的类型名却不能这样做。如下所示:#define INTERGE intunsigned INTER...原创 2017-03-23 22:27:03 · 2624 阅读 · 0 评论 -
C语言--字符串常量存贮
字符串常量,我们经常用到,但是它到底放在哪个存储区呢?是“自动存储区”还是“静态存储区”中?比如:char *pstr="hello world!";这里,"hello world!"是一个字符串常量,pstr是在栈中的变量。我想问,字符串常量,在哪个内存区域分配空间呢?好像应该不是在“栈区“分配空间吧!一、预备知识—程序的内存分配一个由C/C++编译的程...原创 2017-03-31 22:36:51 · 1069 阅读 · 0 评论 -
C语言结构体
结构体在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:struct 结构体名{ 结构体所包含的变量或数组};结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。请看下面的一个例子:struct stu{ char *name; /...原创 2017-03-23 21:57:59 · 446 阅读 · 0 评论 -
c++中冒号(:)和双冒号(::)的用法
1.冒号(:)用法(1)表示机构内位域的定义(即该变量占几个bit空间)typedef struct _XXX{unsigned char a:4;unsigned char c;} ; XXX(2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。struct _XXX{_XXX转载 2017-05-23 07:36:23 · 503 阅读 · 0 评论 -
C中如何调用C++函数
前阵子被问及一个在C中如何调用C++函数的问题,当时简单回答是将函数用extern "C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上有一翻译C++之父的文章可以作为解答,遂拿来Mark一下。将 C++ 函数声明为``extern "C"''(在你的 C++ 代码里做这个声明),然后调用它(在你的 C 或者 C++ 代码里调用)。例如:// C++ code:e转载 2017-06-21 07:02:21 · 452 阅读 · 0 评论 -
怎么样才算是精通 C++?
作者:vczh链接:https://www.zhihu.com/question/19794858/answer/18448868来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。精通C++是一个艰巨的任务。为什么C++比别的语言难学这么多?其实这基本上是因为C++他爹Bjarne Stroustrup说过的一句话“我特别讨厌语言的设计者把自己的喜好转载 2017-07-01 09:41:09 · 761 阅读 · 0 评论 -
C语言中利用setjmp和longjmp做异常处理
错误处理是任何语言都需要解决的问题,只有不能保证100%的正确运行,就需要有处理错误的机制。异常处理就是其中的一种错误处理方式。1 过程活动记录(Active Record)C语言中每当有一个函数调用时,就会在堆栈(Stack)上准备一个被称为AR的结构,抛开具体编译器实现细节的不同,这个AR基本结构如下所示。 每当遇到一次函数调用的语句,C编译器都会产生出汇编代码来在转载 2017-06-13 21:57:23 · 491 阅读 · 0 评论 -
面向对象的基本概念
面向对象的基本概念有对象、类、抽象、封装、继承、多态、接口、消息、组件、模式和复用等。 1.对象 对象是由数据及其操作所构成的封装体,是系统中用来描述客观事物的一个封装,是构成系统的基本单位,采用计算机语言描述,对象是由一组属性和对这组属性进行操作的一组服务构成。 对象包含三个基本要素,分别是对象标识、对象状态和对象行为。 每一个对象必须有一个名字以区别于其他对象,这就是对象标识;转载 2017-08-02 23:09:11 · 1709 阅读 · 0 评论 -
面向对象和面向过程的区别
面向对象:用线性的思维。与面向过程相辅相成。在软件开发过程中,宏观上,用面向对象来把握事物间复杂的关系,分析系统。微观上,仍然使用面向过程。“面向过程”是一种是事件为中心的编程思想。就是分析出解决问题所需的步骤,然后用函数把这写步骤实现,并按顺序调用。 ”面向对象“是以“对象”为中心的编程思想。 简单的举个例子:汽车发动、汽车到站。汽车启动是一个事件,汽车到站转载 2017-08-02 23:12:25 · 388 阅读 · 0 评论 -
C++面向对象模型初探
C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类。从计算机的角度,程序依然由数据段和代码段构成。C++编译器如何完成面向对象理论到计算机程序的转化?换句话:C++编译器是如何管理类、对象、类和对象之间的关系?具体的说:具体对象调用类写的方法,那c++编译器是如何区分,是那个具体的类,调用这个方法呢?我们先看下面一段代码:转载 2017-08-17 23:06:57 · 279 阅读 · 0 评论 -
命名空间namespace的概念和使用
为什么需要命名空间(问题提出)命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。在 C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。 在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们。1、全局变量的作用域是整个转载 2017-08-03 23:04:30 · 1875 阅读 · 3 评论 -
C++对象的动态建立与释放详解(new和delete)
我们知道可以用new运算符可以动态的分配内存,用delete运算符可以释放这些内存。当我们使用new运算符动态的分配一个内存之后,会自动返回一个该内存段的起始地址,也就是指针。=============下面先给出一个new和delete基本应用的例子,回顾一下它的基本用法============#includeusing namespace std;int main(){转载 2017-08-15 23:09:32 · 5844 阅读 · 0 评论 -
new/delete和malloc/free的区别深入解析
1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。1.转载 2017-08-16 07:40:52 · 538 阅读 · 0 评论 -
C语言--堆和栈的区别
1. 申请方式栈(satck):由系统自动分配。例如,声明在函数中一个局部变量int b;系统自动在栈中为b开辟空间。堆(heap):需程序员自己申请(调用malloc,realloc,calloc),并指明大小,并由程序员进行释放。容易产生memory leak. eg:char p; p = (char *)malloc(sizeof(char)); 但是,p本身是在栈中。2.原创 2017-10-25 22:54:28 · 550 阅读 · 0 评论 -
C语言--内存分配(详细解说)
要想完全理解C语言的内存分配,必须要知道计算机的组成和基本原理。1. 计算机的组成计算机的五大组成部分:运算器、控制器、存储器、输入设备和输出设备。我们都知道计算机的处理中心是CPU,它主要由运算器和控制器组成。1.运算器实现算术运算和逻辑运算的部分,主要对数据进行加工处理。2.控制器计算机的指挥中心,它通过地址访问存储器,从存储器中取出指令(程序),并指出下一指令在存储器中的位置,将取出的指令经指原创 2017-10-25 23:05:02 · 2639 阅读 · 0 评论 -
C语言--结构体成员指针变量与结构体指针变量的区别
先看一段代码:#include <stdio.h> #include <stdlib.h> #include <string.h> struct student{ char *name; int score; struct student* next; }stu,*stu1; int...原创 2019-05-29 22:43:15 · 12837 阅读 · 7 评论