
C/C++
文章平均质量分 78
feike2008
这个作者很懒,什么都没留下…
展开
-
动态二维数组的分配与释放
<br />动态二维数组的分配与释放<br /> <br /> <br />两种方法:<br />1。先定义一个一维数组的类型,然后再用该类型定义一个一维数组(实际上已经成为二维的)<br /> 相当于递归定义<br /> <br /> typedef int array[COL]; //使用typedef定义一个具有COL个元素的数组类型<br />转载 2010-06-25 15:22:00 · 828 阅读 · 0 评论 -
c++总结
经验:1、一个函数只实现相应的一个单功能2、用extern声明外部变量 (1)在同一个文件内,若定义在文件中间,要在文件前面使用,可以在前面用extern声明 (2)在相关联的不同的文件内,若文件A定义了变量a,文件B要使用变量a,若都定义变量a会出现重复定义错误,在文件B中只要加上extern a(不用加类型如int,但建议加上,否则可能出现不可预期的错误,实际操作中的经验),就可以使用转载 2010-05-22 16:28:00 · 904 阅读 · 0 评论 -
strcpy()、memcpy()、memmove()、memset()的实现
一直想知道内部实现, 现在想看了, 就找了一下.不错.strcpy()、memcpy()、memmove()、memset()的实现 strcpy(), 字符串拷贝.char *strcpy(char *strDest, const char *strSrc){ assert((strDest!=NULL) && (strSrc !=NULL)); char *address = st转载 2010-05-24 00:17:00 · 458 阅读 · 0 评论 -
C++基础知识,你知道多少?
1. 传指针时,我们可以通过指针来修改它在外部所指向的内容。但如果要修改外部指针所指向的对象是不可能的。例如传递外部指针到函数内来分配空间,必须传递指针的指针或指针的引用。 2. char carry[10] = {0}; 编译器会将其后所有的东西都置0; 3. 函数返回值为const时,返回的东西付给一个类型相同的标示后其不能为左值; 4. const int *i; int转载 2010-05-24 00:24:00 · 407 阅读 · 0 评论 -
c/c++指针精髓二(2)
<br />1.3. 5杜绝“野指针”<br /><br />“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。 “野指针”的原因主要有如下几种: <br /><br />(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。例如 <br /><br />c转载 2010-06-07 00:32:00 · 511 阅读 · 0 评论 -
c/c++指针精髓二(3)
<br /> 试图用指针参数申请动态内存<br /> 毛病出在函数GetMemory中。编译器总是要为函数的每个参数制作临时副本,指针参数ip的副本是 _ip,编译器使 _ip = ip。如果函数体内的程序修改了_ip的内容,就导致参数ip的内容作相应的修改。这就是指针可以用作输出参数的原因。在本例中,_ip申请了新的内存,只是把_ip所指的内存地址改变了,但是ip丝毫未变。所以函数GetMemory并不能输出任何东西。事实上,每执行一次GetMemory就会泄露一块内存,因为没有用free释放内存。转载 2010-06-07 00:36:00 · 488 阅读 · 0 评论 -
c/c++指针精髓二(1)
<br />1.3指针与内存管理<br /><br /> 利用指针你可以将数据写入内存中的任意位置,但是,一旦你的程序中有一个野指针("wild”pointer),即指向一个错误位置的指针,你的数据就危险了—存放在堆中的数据可能会被破坏,用来管理堆的数据结构也可能会被破坏,甚至操作系统的数据也可能会被修改,有时,上述三种破坏情况会同时发生。所以合理的正确的分配指针的地址是非常重要的。 <br /><br /><br />1.3.1内存分配的方式 <br /><br />内存分配方式有三种: <br /转载 2010-06-07 00:22:00 · 968 阅读 · 0 评论 -
重载 方括号 中括号 [][] [C++]
<br />用嵌套类:<br />#include <iostream><br />#include <cassert><br />using namespace std;<br />class Array;<br />class Matrix<br />{<br />public:<br />Matrix(int r=0,int c=0);<br />class Array<br />{<br /> friend class Matrix;<br />public:<br /> int & ope原创 2010-09-26 14:21:00 · 11719 阅读 · 0 评论 -
C++重载operator的示例
#include#includeusing namespace std;class test{public: int v; /*构造函数*/ test():v(0){} test(const int &a):v(a){} test(const test &t1):v(t1.v){} /*以下重载小于号 > 输出> (istream & is, test &t1){ cin >> t1.v;原创 2010-09-26 14:22:00 · 732 阅读 · 0 评论 -
求字符串全排列
<br />求字符串全排列 输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。 <br />分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试题中。<br />我们以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc的排列。当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交换,得到bac,接着我们固定第转载 2010-11-20 12:49:00 · 1180 阅读 · 0 评论 -
静态方法和实例化方法的区别
静态方法和实例化方法的区别 这是一个经常被时时提出来的问题,很多时候我们以为理解了、懂了,但深究一下,我们却发现并不懂。方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法,问原因也说不出来所以然,或者简单的回答两者定义的区别,静态方法不需要new就可以使用 实例化方法需要new了以后才可以使用。。。。我们真的理解了吗?从实际项目开发说起,这里有开转载 2012-06-23 23:51:00 · 737 阅读 · 0 评论 -
c语言指针和数组
1、指针数组问题和 指向数组的指针。 int multi[2][4]; int (*p)[4]; //如果我写成 int *p 可以么?; p = multi;这是 多维数组 和指针的关系, 指针数组比较容易理解。 指针数组: 是一个数组,里面都放着某种类型的指针。 数组指针: 指向数组的指针 int * b=new int[10]; 指向一维数原创 2010-05-22 10:18:00 · 511 阅读 · 0 评论 -
C++多态性与虚函数
多态性与虚函数1.多态性polymorphism:在C++中多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数。2.在面向对象方法中一般是这样表述多态性的:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法).也就是说,每个对象可以用自己的方式去响应共同的消息。3.所谓消息,就是调用函数。4.不同的行为:就是指不同的实现,即执行不同的函数。转载 2010-05-21 23:37:00 · 593 阅读 · 0 评论 -
面向对象:类组合还是类继承?
类组 合 还 是 类继 承? 假设 我 们 有一 张 表A,有多个画面用到。比如10个画面用到。由于每个画面功能不一 样 ,但A表的大多数字段所以字段都是共用的。 这 种情况下,怎么写自己的INFO 类 呢?大概有3种方案 方案1:每个画面都写一个自己的INFO类 。 方案2:先写一个表A的INFO类 ,然后每个画面的INFO 类 里面加一个表A的INFO 类 作 为 属性。也就是 类组原创 2010-05-21 19:58:00 · 978 阅读 · 0 评论 -
cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
<br />学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息;<br />1、cin<br />1、cin.get()<br />2、cin.getline()<br />3、getline()<br />4、gets()<br />5、getchar()<br />1、cin>> <br />用法1:最基本,也是最常用的用法,输入一个数字: <br转载 2010-06-28 19:56:00 · 538 阅读 · 0 评论 -
#pragma once 与 #ifndef 的区别解析
为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 声明、定义语句 #endif转载 2010-05-20 23:15:00 · 485 阅读 · 0 评论 -
extern c 谈
C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同.作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同. 2.从转载 2010-05-20 23:23:00 · 339 阅读 · 0 评论 -
你最需要注意的11条要点for C++
下面的这些要点是对所有的C++程序员都适用的。我之所以说它们是最重要的,是因为这些要点中提到的是你通常在C++书中或网站上无法找到的。如:指向成员的指针,这是许多资料中都不愿提到的地方,也是经常出错的地方,甚至是对一些高级的C++程序员也是如此。 这里的要点不仅仅是解释怎样写出更好的代码,更多的是展现出语言规则里面的东西。很显然,它们对C++程序员来说是永久的好资料。我相信这一篇文章会使你收获不转载 2010-05-20 23:28:00 · 421 阅读 · 0 评论 -
指针和引用的区别总结
1.从现象上看:指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变 -v5Y "` 2.从内存分配上看:程序为指针变量分配内存区域,而引用不分配内存区域 +LdZz$c- 3.从编译上看:程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值原创 2010-05-21 20:54:00 · 515 阅读 · 0 评论 -
C语言的移位操作符
位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。位移位运算符分为左移和右移两种,均为双目运算符。第一运算对象是移位对象,第二个运算对象是所移的二进制位数。 位移位运算符的运算对象、运算规则与结果、结合性如表2-16所示。 移位时,移出的位数全部丢弃,移出的空位补入的数与左移还是右移花接木有关。如果是左移,则规定补入的数全部是0;如果是右移,还与被移位的数据是否带符号有关。原创 2010-05-23 21:46:00 · 3392 阅读 · 0 评论 -
几个典型的内存拷贝及字符串函数实现
写一个函数,完成内存之间的拷贝。[考虑问题是否全面,是否考虑内存重叠问题]返回void *支持链式操作,参数类型是void *以支持任意类型的指针,输入参数加上const修饰,最好加上assert对输入输出指针进行非NULL判断void* memcpy( void *dest, const void *src, size_t count ){ char* pdest = st原创 2010-05-24 00:05:00 · 590 阅读 · 0 评论 -
c++笔试题
1.介绍一下STL,详细说明STL如何实现vector。Answer:STL (标准模版库,Standard Template Library.它由容器算法迭代器组成。STL有以下的一些优点:可以方便容易地实现搜索数据或对数据排序等一系列的算法;调试程序时更加安全和方便;即使是人们用STL在UNIX平台下写的代码你也可以很容易地理解(因为STL是跨平台的)。vector实质上就是一个动态数组,会根原创 2010-05-21 18:37:00 · 608 阅读 · 0 评论 -
指针、字符串及字符串操作函数
开始之前必须明确strlen的含义,原型为size_t strlen( char *str ); strlen返回字符串的长度,即null(/0)之前的字符的数量。一 char* 与 char []实例加注释:Code void TestCharPointerAndArray() { char *c1 = "abc"; //abc/0常量区,c1在栈上, 常量区程序结束后自动释转载 2010-05-23 19:57:00 · 1947 阅读 · 0 评论 -
转:C/C++:memmove、memcpy、strcpy三者的区别
strcpy只能处理字符串;如果拷贝带有特殊字符的串,就只能用memcpy或memmove。memcpy和memmove功能基本上差不多,但是当源串和目标串有Overlap时,memmove可以正确处理,memcpy则不行。memcpy()和memmove()都是C语言中的库函数,在头文件string.h中,其原型分别如下: void * memcpy ( void * dst, cons转载 2010-05-24 00:14:00 · 606 阅读 · 0 评论 -
(转)C++内存管理
我们给auto_vect提供了标准的begin和end方法来找回iterator:class auto_vector{public:typedef auto_iterator iterator;iterator begin () { return _arr; }iterator end () { return _arr + _end; }};转载 2012-06-23 23:52:04 · 967 阅读 · 0 评论