![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
蓝翳-裂缝中的阳光
First you do it then something change it.
展开
-
二维数组的传递
问题描述:于习题中碰到关于数组传递的问题,不熟悉相关。引发运行错误//二维数组传递的几种方式(1) void function(char a[][20]) //数组名传递 { }(2) void function(char *p[]) // 指针数组传递 { }(3) void function(char (*p)[20]) //数组指针传递 {原创 2013-04-02 16:40:14 · 455 阅读 · 0 评论 -
区分多态与重载
多态是基于对抽象方法的覆盖来实现的,用统一的对外接口来完成不同的功能。重载也是用统一的对外接口来完成不同的功能。那么两者有什么区别呢?重载,是指允许存在多个同名方法,而这些方法的参数不同。重载的实现是:编译器根据方法不同的参数表,对同名方法的名称做修饰。对于编译器而言,这些同名方法就成了不同的方法。它们的调用地址在编译期就绑定了。多态:是指子类重新定义父类的虚方法(virtua原创 2013-04-09 14:20:38 · 493 阅读 · 0 评论 -
斐波纳契数列
斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1960年代起出版了《斐波纳契数列》季刊,专门刊载这方面的研究成果。拓展:一个台阶总共有n级原创 2013-04-11 18:33:43 · 815 阅读 · 0 评论 -
Socket通信原理和实践
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下:1、网络中进程之间如何通信?2、Socket是什么?转载 2013-04-12 20:16:01 · 495 阅读 · 0 评论 -
Linux目录文件操作
1.stat 获取文件属性 #include #include #include int stat(const char *filename,struct stat *buf); int fstat(fd, struct stat *buf); int lstat(con转载 2013-04-12 21:23:51 · 479 阅读 · 0 评论 -
格式化I/O
printf(格式控制,输入表列)例:printf("%d%d",a,b)(1)d格式符:输出一个有符号的十进制整数(2)c格式符:输出一个字符(3)s格式符:输出一个字符串(4)f格式符:输出实数,有几种用法: A.基本型(%f):实数中的整数部分全部输出,小数部分输出6位; B.指定数据宽度和小数位数(转载 2013-04-15 15:57:14 · 512 阅读 · 0 评论 -
进程介绍(一)
这篇文章介绍的内容包括1.Linux进程--进程标识号2.进程控制--进程创建1.Linux进程--进程标识号进程(Process)是一个程序在其自身的虚拟地址空间中的一次执行活动。多个程序并发执行,可以提高系统的资源利用率和吞吐量。进程和程序:程序只是一个静态的数据和指令集合,而进程是一个程序的动态执行过程,具有生命周期,是转载 2013-04-15 16:51:58 · 572 阅读 · 0 评论 -
DSP C6000 keywords 关键字总结
extern:extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。 const: 可以用const定义一些变量或数组,以确保它的值不被改变。例:int *const p = &x; 定义一个常量指针p给变量int。 const int *q转载 2013-04-15 08:58:07 · 667 阅读 · 0 评论 -
判断出栈序列是否正确
题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序思路如下:pop的数字正好是栈顶数字,直接pop出栈即可;如果希望pop的数字目前不在栈顶,我们就到push序列中还没有被push到栈里的数字中去搜索这个数字,并把在它之前的所有数字都push进栈。如果所有的数字都被push进栈仍然没有找到这个数字,表明该序列不可能是一个po原创 2013-04-17 16:54:51 · 1209 阅读 · 0 评论 -
为什么C++编译器不能支持对模板的分离式编译
为什么C++编译器不能支持对模板的分离式编译首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件(假定我们的平台是win32),后者拥有PE(Portable Executable,即windows可执行文件)文件格式,并且本身包含的就转载 2013-04-27 16:05:53 · 509 阅读 · 0 评论 -
在C++使用接口
面向对象的语言诸如JAVA提供了Interface来实现接口,但C++却没有这样一个东西,尽管C++通过纯虚基类实现接口,譬如COM的C++实现就是通过纯虚基类实现的(当然MFC的COM实现用了嵌套类),但我们更愿意看到一个诸如Interface的东西。下面就介绍一种解决办法。首先我们需要一些宏://// Interfaces.h//#define Interfac转载 2013-04-27 20:11:15 · 927 阅读 · 0 评论 -
进程介绍6:进程的各种标识
本文将介绍进程的:1.进程的用户标识号2.进程标识号进程的用户ID Linux/Unix进程涉及到三类用户ID: 1、实际用户ID(real user id,RUID):为该进程的的创建者的用户ID,也可以说是进程的执行者。该ID仅root用户可以修改; 2、有效用户ID(effective user转载 2013-04-19 15:10:56 · 1422 阅读 · 0 评论 -
#、##和__VA_ARGS__
1.#假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化(stringizing).#incldue #define PSQR(x) printf("the square of" #x "is %d.\n",(x)*(转载 2013-05-02 10:20:43 · 457 阅读 · 0 评论 -
虚函数中的析构函数
析构函数执行时先调用派生类的析构函数,其次才调用基类的析构函数。如果析构函数不是虚函数,而程序执行时又要通过基类的指针去销毁派生类的动态对象,那么用delete销毁对象时,只调用了基类的析构函数,未调用派生类的析构函数。这样会造成销毁对象不完全。#include#includeclass CPerson{public: virtual ~CPerson();转载 2013-06-20 09:26:36 · 500 阅读 · 0 评论 -
类中特殊成员变量的初始化
有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:a. 常量型成员变量b. 引用型成员变量c. 静态成员变量d. 整型静态常量成员变量e. 非整型静态常量成员变量 对于常量型成员变量和引用型成员变量的初始化,必须通过构转载 2013-06-20 16:23:37 · 527 阅读 · 0 评论 -
多重继承构造函数执行顺序
class 派生类名:继承方式1 基类名1,继承方式2 基类名2,....{ //派生类成员定义};对每个基类可以用不同的继承方式,默认继承方式为private。 在多重继承中,派生类的构造函数与单继承下派生类构造函数相似,它必须负责该派生类所有基类构造函数以及对象成员(如果有的话)构造函数的调用。同时,派生类的参数必须包含完成所有基类、对象成转载 2013-08-21 18:39:23 · 809 阅读 · 0 评论 -
覆盖 多态 重载 隐藏
先介绍下动态绑定,多态性,函数覆盖,这3个概念是一致的,不同的书上有不同的叫法,但是他们的本质是一样的。都体现了面向对象编程语言的一个重要的特点。 识记关键词:(动态绑定,多态性,函数覆盖),基类,派生类,基类指针(引用),虚函数实现手段:在C++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定。引用(或指针)既可以指向基类对象也可以指向派生类对象,转载 2013-04-09 14:52:01 · 569 阅读 · 0 评论 -
最小生成树---kruskal算法
克鲁斯卡尔(Kruskal)算法(只与边相关) 算法描述:克鲁斯卡尔算法需要对图的边进行访问,所以克鲁斯卡尔算法的时间复杂度只和边有关系,可以证明其时间复杂度为O(eloge)。算法过程:1.将图各边按照权值进行排序2.将图遍历一次,找出权值最小的边,(条件:此次找出的边不能和已加入最小生成树集合的边构成环),若符合条件,则加入最小生成树的集合中。不符合条件原创 2013-04-02 13:39:12 · 602 阅读 · 0 评论 -
空类的大小
1、为何空类的大小不是0呢?为了确保两个不同对象的地址不同,必须如此。类的实例化是在内存中分配一块地址,每个实例在内存中都有独一无二的二地址。同样,空类也会实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化后就有独一无二的地址了。所以,空类的sizeof为1,而不是0.2、请看下面的类:class A{ virtual void f(){} };c原创 2013-04-07 16:16:09 · 458 阅读 · 0 评论 -
二级指针和二维数组的转换
void fun(char ** p) { char (*p1)[10] = (char(*)[10])p; cout << p1[0];} int main(int argc, char* argv[]){ char data[][10] = {"abc","123"}; fun((char **)data);}p的类型在声明形参的时原创 2013-04-03 10:23:50 · 511 阅读 · 0 评论 -
二维数组的动态分配和删除
今天在群里遇到一个询问二维数组动态申请的问题,自己想了一种办法,又在网上搜了一下,觉得下面这篇文章写得不错,特转帖如下:两种方法:1。先定义一个一维数组的类型,然后再用该类型定义一个一维数组(实际上已经成为二维的) 相当于递归定义 typedef int array[COL]; //使用typedef定义一个具原创 2013-04-03 10:30:51 · 494 阅读 · 0 评论 -
Linux 如何编译C++程序
Linux 中最重要的软件开发工具是 GCC。GCC 是 GNU 的 C 和 C++ 编译器。实际上,GCC 能够编译三种语言:C、C++ 和 Object C(C 语言的一种面向对象扩展)。利用 gcc 命令可同时编译并连接 C 和 C++ 源程序。#DEMO#: hello.c如果你有两个或少数几个 C 源文件,也可以方便地利用 GCC 编译、连接并生成可执行文件。例如,假原创 2013-04-03 14:29:50 · 874 阅读 · 0 评论 -
C和C++ 语言动态内存分配
C和C++ 语言动态内存分配一、C语言动态内存分配 要实现动态内存的分配,除了利用含指针成员的结构体之外,还需利用C语言提供的几个标准库函数。(使用时应包含头文件“alloc.h”或“malloc.h”或“stdlib.h”) 1.malloc函数 函数原型为void *malloc(unsigned int size);在内存的动态存原创 2013-04-03 07:58:56 · 428 阅读 · 0 评论 -
数组指针和指针数组的区别
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;原创 2013-04-03 10:22:12 · 457 阅读 · 0 评论 -
C++容器
1 概要介绍vector用来代替数组,也就是,要经常用下标运算的地方list是链表,多用表经常使用插入删除的地方map是图,比如做一个字典了,电话薄了,会用到queue很少用,比如排队买火车票的队列,就是这种结构set更少用,指的是一个无序集合 vectorintValues(10);是10个元素的1个向量vectorintValue原创 2013-04-06 16:15:24 · 428 阅读 · 0 评论 -
C++面试题
过去收集的些C++面试题,写了答案和分析。如有错误,欢迎指出。收集的试题只有部分是有答案,自己补上了剩下的答案并做了分析。如果不能算原创的话,请指出。1. 以下三条输出语句分别输出什么?[C易]char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc";const char转载 2013-04-06 21:43:32 · 475 阅读 · 0 评论 -
C++ Map容器介绍
Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map最基本的构造函数; mapmapstring; mapmapint; mapmapstring; mapmapchar; mapmapchar; mapmapint原创 2013-04-06 16:22:11 · 520 阅读 · 0 评论 -
C++操作符的优先级
C++操作符的优先级C++操作符的优先级操作符及其结合性功能用法LLL::::::全局作用域 类作用域 名字空间作用域::nameclass::namenamespace::nameLLLLL.->[]()()原创 2013-04-06 19:39:12 · 449 阅读 · 0 评论 -
C++类型转换
C 风格(C-style)强制转型如下:(T) expression // cast expression to be of type T函数风格(Function-style)强制转型使用这样的语法:T(expression) // cast expression to be of type T这两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问转载 2013-04-06 21:52:18 · 391 阅读 · 0 评论 -
C语言内存分配及堆栈问题总结[转]
C语言程序编译的内存分配,堆与栈的区别 C语言程序编译的内存分配:1.栈区(stack) --编译器自动分配释放,主要存放函数的参数值,局部变量值等;2.堆区(heap) --由程序员分配释放;3.全局区或静态区 --存放全局变量和静态变量;程序结束时由系统释放,分为全局初始化区和全局未初始化区;4.字符常量区 --常量字符串放与此,程序结束时由系统释放;转载 2013-04-06 22:00:29 · 1330 阅读 · 0 评论 -
C++编程命名规范
在软件开发过程中,代码的命名规范是一项很突出的内容。一套定义完整、结构清晰明了的命名规范将大大提升源代码的可读性和软件的可维护性。据考证,没有一种命名规则可以让所有的程序员都满意,程序设计教科书一般也不会指定命名规则。但是制定一套令开发组成员基本满意的命名规则,并在项目中贯彻实施,也是团队开发一项必不可少的工作。我将我的团队的实际工作中的命名规则整理如下: 第一部分:共性规则共转载 2013-04-07 11:58:08 · 550 阅读 · 0 评论 -
指针常量与常量指针的区别
三个名词虽然非常绕嘴,不过说的非常准确。用中国话的语义分析就可以很方便地把三个概念区分开。一) 常量指针。常量是形容词,指针是名词,以指针为中心的一个偏正结构短语。这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。在C/C++中,常量指针是这样声明的:1)const int *p原创 2013-04-07 16:48:02 · 489 阅读 · 0 评论 -
数据对齐
许多计算机系统对数据类型的合法地址做了一些限制,要求某种数据类型对象的地址必须是某个值K(2,4,8)的倍数,这种堆积限制简化形成了处理器和存储器系统之间接口的硬件设计,总之就是为了方便高效的读取数据,于是就有了数据对齐。struct S1{ char k; double i; char c; }; Sizeof(S1)的值为24原创 2013-04-07 14:35:10 · 400 阅读 · 0 评论 -
sizeof的各项测试
首先要明确sizeof不是函数,也不是一元运算符,它是个类似宏定义的特殊关键字,sizeof()。括号的内容在编译过程中是不被编译的,而是被替代的类型,如int a = 8;sizeof(a)。在编译过程中,不管a的值是什么,只是被替换成类型sizeof(int),结果为4.如果sizeof(a = 6)呢?也是一样的转换成a的类型。但是要注意,因为a = 6是不被编译的,所以执行完s原创 2013-04-07 16:02:23 · 583 阅读 · 0 评论 -
STL容器总结
一. 种类:标准STL序列容器:vector、string、deque和list。标准STL关联容器:set、multiset、map和multimap。非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一个重型字符串非标准关联容器hash_set、hash_multiset、hash_map和hash_multimap。几种标准非STL容器,包括数组、bits原创 2013-09-12 14:52:01 · 765 阅读 · 0 评论