代码改变世界

随笔分类 -  C++

[转]类的自动类型转换和转换操作符

2011-10-03 22:10 by ...平..淡..., 329 阅读, 收藏, 编辑
摘要: 1.当构造函数只接受一个参数时,则该类可以与该参数类型相同的值转换。看下面这个简单的例子:12345678910111213141516// Woo.h file#ifndef WOO_H#define WOO_Hclass Woo{private: double mm;public: /*explicit*/ Woo(double a); Woo() {mm=0;}; void show(); //operator double() const;};#endif123456789101112131415161718192021// Woo.cpp file#include "sto 阅读全文

[转]二维数组和二级指针的传递问题

2011-10-03 21:39 by ...平..淡..., 2289 阅读, 收藏, 编辑
摘要: 再次看这篇文章,感觉说的好多都是废话,在文章最前面补充一句话:“[]的优先级高于*”,大家可以带着这句话看下面的~~~========================再一次的见证了自己的基础不牢靠。。。幸好发现得早,看见网上说,华为的一个面试题就考了这个方面的。借那道华为的面试题引出问题,题目:char **p, a[16][8]; 问:p=a是否会导致程序在以后出现问题?为什么?可能有一部分朋友会回答正确,这里他们认为,a[]是一级指针,a[][]就是二级指针。那这个到底对不对呢?OK,用事实说话:1234567891011121314151617// Author: Tanky Woo// 阅读全文

堆和栈的区别

2011-10-03 11:04 by ...平..淡..., 244 阅读, 收藏, 编辑
摘要: 一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack):由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。-程序结束后有系统释放4、文字常量区—常量字符串就是放在这里的。程序结束 阅读全文

链表和数组的区别

2011-10-03 10:54 by ...平..淡..., 223 阅读, 收藏, 编辑
摘要: (从 逻辑结构 和 内存存储 方面分析)A 从逻辑结构来看A-1. 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。A-2. 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项)B 从内存存储来看B-1. (静态)数组从栈中分配空间, 对于程序员方便快速,但是自由度小B-2. 链表从堆中分配空间, 自由度大但是申请管理比较麻烦. 阅读全文

[转]函数指针简单讲解

2011-10-01 19:39 by ...平..淡..., 284 阅读, 收藏, 编辑
摘要: 本文出自http://www.wutianqi.com/?p=2721因为基本没用过函数指针,所以对这个概念及用法比较模糊,最近温习C++在,再次看见这个概念,于是百度了下,看见网上有很多关于函数指针的文章,不过在纷纷转载的过程中,格式上的错位,让人看着难受,我自己也简单的总结下,方便以后查阅。首先要清楚一个概念:1.数组的数组名就是这个数组的地址,也即数组第一个元素的地址(指针)。2.函数的函数名就是这个函数的入口地址(指针)。3.结构体的结构名不是这个结构的地址,要取得结构体的地址,必须得用&(取地址运算符)。其次,还得对函数指针,指针函数,数组指针,指针数组这四个容易混淆的概念区 阅读全文

二维数组作为参数传递

2011-09-29 11:08 by ...平..淡..., 1989 阅读, 收藏, 编辑
摘要: 做 图的m--着色问题 的时候,在“二维数组作为参数传递给函数”的问题上果断阵亡(原先一直没怎么用过二维数组做参数传递),上网查了些资料,嘿嘿,搞清楚了,好好总结了下:问题描述:当二维数组作为参数传递给函数时,函数的形参不能简单地写双重指针,因为编译器实际寻址如下:对于数组 int p[m][n];如果要取p[i][j]的值,编译器是这样寻址的:p + i*n + j; 如果我们省略了第二维或者更高维的大小,编译器将不知道如何正确的寻址。因此如果我们在编写程序的时候需要用到各个维数都不固定的二维数组作为参数,虽然这个时候编译器还是不能识别,但我们可以把二维数组当做普通的指针,将它的大小用两个参 阅读全文