
C/C++
文章平均质量分 62
等风吹过
技术成就梦想
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
基类,派生类,内存分配情况
派生类继承基类 内存分配时,是在于基类对象不同的内存地址处,按基类的成员变量类型,开辟一个同样的类型空间,但注意开辟后派生对象的空间,不是复制基类的成员的值,而是仅仅开辟那种成员类型的空间,未初始化时,里面存在的数是不确定的。 然后派生类自己定义的成员变量是排在继承的A类成员下面,如果派生类定义的变量名与基类相同,则此变量覆盖掉继承的基类同名变量,注意,覆盖不是删除,也转载 2013-07-17 11:37:31 · 1236 阅读 · 0 评论 -
C++ limits头文件的用法(numeric_limits)
初学C++的时候,对这个模板很陌生,不知道它到底是做什么用的,今天拿起《C++标准程序库》,出现了它的讨论,所以决定好好研究一番。1. numeric_limits是什么?(A)《C++标准程序库》: 一般来说,数值型别的极值是一个与平台相关的特性。C++标准程序库通过template numeric_limits提供这些极值,取代传统C语言,所采用的预处理常数。新的极值转载 2013-07-26 17:49:08 · 1046 阅读 · 0 评论 -
用一个宏定义FIND求一个结构体struct里某个变量相对struc的编移量.
用一个宏定义FIND求一个结构体struct里某个变量相对struc的编移量.如:stuct student { int a; char b[20]; double ccc; } 则: FIND(student,a); //等于0 FIND(student,b);//等于4#def转载 2013-08-02 16:57:00 · 1160 阅读 · 0 评论 -
const在c/c++中的区别
1 、C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中。C中const是一个不能被改变的普通变量,始终为const变量分配空间, 编译器不知道编译时的值。所以,以下代码:#include using namespace std;int main(){ const int a原创 2013-08-02 21:14:54 · 608 阅读 · 0 评论 -
成员在类中的偏移量 & 类成员指针
看一道笔试题(引自程序员面试宝典):写出程序输出结果1234567891011121314151617181920212223242526272829#include class A { public: A(转载 2013-08-04 17:30:59 · 611 阅读 · 0 评论 -
malloc()/calloc()、realloc函数
1.原型:extern void*realloc(void *ptr, size_t newsize); 用法:#include 功能:改变ptr所指内存区域的大小为newsize长度。 说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 当内存不再使用时,应使用free()函数将内存块释放。它用来在堆中更改已经配置好的原创 2013-08-06 11:23:44 · 610 阅读 · 0 评论 -
高质量c/c++之return语句
(1)return语句不可返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。例如 char * Func(void) { char str[] = “hello world”; // str的内存位于栈上 … return str; // 将导致错误 }(2)要搞清楚转载 2013-08-06 20:03:41 · 560 阅读 · 0 评论 -
strcpy和strncpy用法和区别
1. strcpy函数:顾名思义字符串复制函数:原型:extern char *strcpy(char *dest,char *src); 功能:把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间,返回dest(地址中存储的为复制后的新值)。要求:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 一般函数原型实现转载 2013-08-07 10:21:33 · 500 阅读 · 0 评论 -
C++中的位拷贝和值拷贝
既然每个类能自动生成构造函数、复制构造函数、析构函数与赋值函数函数,为什么还要程序员编写?(1)如果使用“缺省的无参数构造函数”和“缺省的析构函数”,等于放弃了自主“初始化”和“清除”的机会,C++发明人Stroustrup的好心好意白费了。(2)“缺省的拷贝构造函数”和“缺省的赋值函数”均采用“位拷贝”而非“值拷贝”的方式来实现,倘若类中含有指针变量,这两个函数注定将出错。为了便于说原创 2013-08-07 21:16:05 · 521 阅读 · 0 评论 -
strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。转载 2013-08-09 11:37:26 · 448 阅读 · 0 评论 -
内存碎片之如何产生
malloc/free或new/delete大量使用后回造成内存碎片,那么这种碎片形成的机理是什么? 如果机理是申请的内存空间大小(太小)所形成的,那么,申请多大的区域能够最大限度的避免内存碎片呢?(这里的避免不是绝对的避免,只是一种概率) 内存碎片一般是由于空闲的连续空间比要申请的空间小,导致这些小内存块不能被利用。产生内存碎片的方法很简单,举个例: 假设转载 2013-08-13 08:14:54 · 523 阅读 · 0 评论 -
字符串与整数之间的转换
在c\c++语言中,我们经常面临需要将字符串转换为整型,以及将整型转化为字符串的问题。#include. 这个是头文件int atoi(const char *); 这个是把字符转换整数double atof(char *); 这个是转换浮点char itoa(int i); 把整数转为字符串(1) 将字符串转换为整数:字符串减’0’就会隐形转化成int类型的数原创 2013-08-15 14:38:38 · 770 阅读 · 0 评论 -
求一个字符串中连续出现次数最多的子串
/* Author: Mcdragon Date: 15-07-11 21:17 Description: 求一个字符串中连续出现次数最多的子串. 基本算法描述: 给出一个字符串abababa 1.穷举出所有的后缀子串 substrs[0] = abababa; substrs[1] = bababa; substr转载 2013-08-15 09:36:34 · 558 阅读 · 0 评论 -
位操作基础篇之位操作全面总结 .
位操作篇共分为基础篇和提高篇,基础篇主要对位操作进行全面总结,帮助大家梳理知识。提高篇则针对各大IT公司如微软、腾讯、百度、360等公司的笔试面试题作详细的解答,使大家能熟练应对在笔试面试中位操作题目。 下面就先来对位操作作个全面总结,欢迎大家补充。在计算机中所有数据都是以二进制的形式储存的。位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快。在实际编转载 2013-08-29 14:23:03 · 683 阅读 · 0 评论 -
size_type和size_t的总结
size_type:size_type是STL定义的,只在namespace std中有效由string类类型和vector类类型定义的类型,用以保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型 string抽象意义是字符串, size()的抽象意义是字符串的尺寸, string::size_type抽象意义是尺寸单位类型原创 2013-09-09 16:21:30 · 795 阅读 · 0 评论 -
区分C语言中getch、getche、fgetc、getc、getchar、fgets、gets
首先,这两个函数不是C标准库中的函数,int getch(void) //从标准输入读入一个字符,当你用键盘输入的时候,屏幕不显示你所输入的字符。也就是,不带回显。int getche(void) //从标准输入读入一个字符,键盘输入的时候,屏幕显示所输入的字符。带回显。这两个函数包含在头文件conio.h中,需要记住的是conio.h不是C标准库中的头文件。Micorso转载 2013-10-13 10:46:47 · 728 阅读 · 0 评论 -
异或符号'^'在C/C++编程中的应用
异或门符号'^',在编程中的使用,有的时候能够让你的程序更加精炼简捷,在程序应用中,可以避免许多麻烦!!!它的几个简单作用讲解如下:它的简单规则是相同为0,不同为1,例如int a=3=011(2进制,在计算机中的存储形式);int b=6=110(2进制,在计算机中的存储形式);int c=a^b=101=5;切忌,在异或门的计算中都是应用的2进制!!任何数和0异或都等于原创 2013-08-02 11:11:14 · 1991 阅读 · 0 评论 -
c/c++中出现的位操作符
按位与运算符(&)参加运算的两个数据,按二进制位进行“与”运算。注意:负数按补码形式参加按位与运算。“与运算”的特殊用途:(1)清零。(2)取一个数中指定位方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。例:设X=10101110,取X的低4位,用 X & 0000 1111 = 0000 1110转载 2013-08-02 11:14:44 · 667 阅读 · 0 评论 -
C/C++浮点数在内存中的存储方式
任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100。则在Intel CPU架构的系统中,存放方式为 10000100(低地址单元) 00000100(高地址单元),因为Intel CPU的架构是小端模式。但是对于浮点数在内存是如何存储的?目前所有的C/C++编译器都是采用IEEE所制定的标准浮点格式,即二进制科学表示原创 2013-08-01 15:22:01 · 537 阅读 · 0 评论 -
C++ 内存管理之一(变量)
(1)变量和常量变量的基本类型:bool、char、int、short、long、float、double,注意个变量的所占的字节数。常量分类:宏常量、const常量、字符串常量,注意宏常量和cons常量之间的区别。#define MAX 100 //宏常量 const int MAX = 100; // C++ 语言的const常量char *p原创 2013-07-17 14:22:24 · 688 阅读 · 0 评论 -
C++ 内存管理之二(内存分配)
1、C++编译的程序占用的内存分五类(1)栈区(stack):程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。(2)堆区(heap) :在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。(3)全局静态区(static转载 2013-07-17 14:48:12 · 588 阅读 · 0 评论 -
C++ 内存管理之四(new/delete vs malloc/free)
new/delete vs malloc/free malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之转载 2013-07-17 15:00:07 · 545 阅读 · 0 评论 -
sizeof(结构体)和内存对齐
有的时候,在脑海中停顿了很久的“显而易见”的东西,其实根本上就是错误的。就拿下面的问题来看:struct T { char ch; int i;}; 使用sizeof(T),将得到什么样的答案呢?要是以前,想都不用想,在32位机中,int是4个字节,char是1个字节,所以T一共是5个字节。实践出真知,在VC6中测试了下,答案确实8个字节。哎,反正受伤的总是我,我已经有点转载 2013-07-17 16:08:50 · 528 阅读 · 0 评论 -
关于大小端、位域的一些概念
大小端: 对于像C++中的char这样的数据类型,它本身就是占用一个字节的大小,不会产生什么问题。但是当数制类型为int,在32bit的系统中,它需要占用4个字节(32bit),这个时候就会产生这4个字节在寄存器中的存放顺序的问题。比如int maxHeight = 0x12345678,&maxHeight = 0x0042ffc4。具体的该怎么存放呢?这个时候就需要理解计算机的大小端的原转载 2013-07-17 16:22:26 · 678 阅读 · 0 评论 -
C++ 内存管理之三(栈和堆)
程序变量分区中栈和堆的区别(1)申请方式stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间。heap: 需要程序员自己申请,并指明大小,在C中malloc函数,C++中是new运算符。如p1 = (char *)malloc(10); p1 = new char[10];如p2 = (char *)malloc(10); p转载 2013-07-17 14:57:14 · 607 阅读 · 0 评论 -
C++ 内存管理之五(数组 vs 指针)
C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。但二者有着本质的区别:数组:要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针:可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。下转载 2013-07-17 15:26:25 · 704 阅读 · 0 评论 -
C++派生类对象访问基类的protected成员
《C++ Primer》上有这么一句话令人费解:“派生类如果要访问基类protected成员只有通过派生类对象,派生类不能访问基类对象的protected成员。”而实际上的意思是:只有在派生类中才可以通过派生类对象访问基类的protected成员。 01.//只有在派生类中才可以通过派生类对象访问基类的protected成员。 02.#include转载 2013-07-17 21:01:03 · 1578 阅读 · 0 评论 -
C++类中的static数据成员,static成员函数
一、static 成员变量对于特定类型的全体对象而言,有时候可能需要访问一个全局的变量。比如说统计某种类型对象已创建的数量。如果我们用全局变量会破坏数据的封装,一般的用户代码都可以修改这个全局变量,这时可以用类的静态成员来解决这个问题。C++primer里面讲过:static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不原创 2013-07-21 01:15:12 · 1051 阅读 · 0 评论 -
c 输出地址格式符%p
c语言中,有常用的几种格式符,%o输出八进制,%d输出十进制,%x输出十六进制,%f输出浮点型数据,%c输出单个字符,%s输出字符串,%l输出长整型。但是也有稍微不是很常用的格式符,%p就是其中之一。相信大家在日常中使用得比较少,其实它的输出格式也是六进制,跟%x的区别在于,%p输出的长度是一致的8位16进制符(即32位2进制符)。以下是一段示例程序,将帮助你理解%p的简单用法:#转载 2013-07-30 09:38:11 · 2755 阅读 · 0 评论 -
让你不再害怕指针 系列
(0)让你不再害怕指针--复杂类型说明要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧:in转载 2013-07-30 09:40:59 · 530 阅读 · 0 评论 -
关于size_t, ptrdiff_t, size_type, difference_type
size_t是unsigned类型,用于指明数组长度或下标,它必须是一个正数,std::size_tptrdiff_t是signed类型,用于存放同一数组中两个指针之间的差距,它可以使负数,std::ptrdiff_t.size_type是unsigned类型,表示容器中元素长度或者下标,vector::size_type i = 0;difference_type是signed类型,转载 2013-07-30 18:08:09 · 557 阅读 · 0 评论 -
C++中extern “C”含义深层探索
1.引言C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。转载 2013-07-31 17:06:38 · 562 阅读 · 0 评论 -
要实strcpy函数的实现
参加笔试回来,其中一题要实现strcpy()函数,是从林锐的《高质量C_C++编程》中借鉴的,下面来看下林锐的答案:char *strcpy(char *strDest, const char *strSrc);{ assert((strDest!=NULL) && (strSrc !=NULL)); // 2分 char *address = strDest转载 2013-08-01 09:54:26 · 546 阅读 · 0 评论 -
conio.h
C语言中,图形函数大致可分为两类:字符模式函数和图形模式函数。本节我们练习使用字符模式函数。 使用字符模式函数应该在程序中联入conio.h头部文件。 下面是一些函数的作用 1) void clreol(); 从光标处删除到本行末 2) void delline();转载 2013-08-01 11:08:16 · 1607 阅读 · 0 评论 -
C++中几种将整数转换成二进制输出的方法
看《编程之美》第二节的时候,它是定义的一个整型,然后取位。但是他的那个或运算符号好像写错了,写成了异或符号“^”,应该是“|”。我就突然对二进制的输出感兴趣了。想知道怎样输出二进制。我们知道C++输出十六进制是cout〈〈hex〈〈 a;而八进制是cout〈〈 ocx〈〈 a;二进制则没有默认的输出格式,需要自己写函数进行转换,于是上网搜索了一下。网上思路真是广泛啊。下面列出一些方法。转载 2013-07-25 15:55:13 · 2010 阅读 · 0 评论 -
Linux环境下段错误的产生原因及调试方法小结
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决。1. 段错误是什么一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,转载 2013-11-07 20:04:23 · 673 阅读 · 0 评论