博文
对C++中引用的补充说明(实例) (2006-08-21 01:37:00)
摘要:#include <iostream>
#include <string>
using namespace std;
void main(int argc,char* argv[])
{
int a=10;
int b=20;
int &rn=a;
cout<<rn<<"|"<<a<<endl;
cout<<&rn<<"|"<<&a<<endl;//c++中是无法取得应用的内存地址的,取引用的地址就是取目标的地址!
rn=b;//把引用指向另一个目标----变量b
cout<<&rn<<"|"<<&a<<"|"<<&b<<endl;
rn=100;//试图改变b的值
cout<<a<<"|"<<b<<endl;//输出修改后的结果
cin.get();
}
由于引用本身就是目标的一个别名,引用本身的地址是一个没有意义的值,所以在c++中是无法取得引用的内存地址的。取引用的地址就是取目标的地址,c++本身就根本不提供获取引用内存地址的方法。
引用一单初始化,就不在能够被指向其它的目标,虽然编译不会出错,但操作是不起作用的,实际上还是指向最先指向的目标......
最近忙些啥?(2006-08-03 23:19:00)
摘要: 学习C++快一个月了,越来越觉得C++的强大了,本来是说坚持写日记的,但是还是没能坚持,哎,看来自己这个性真的很难成大事啊,好久没上来写点什么了,最近自己也没学到什么过些时在写吧。......
C/C++ 常见误区(2006-07-16 10:49:00)
摘要:在此论坛上发现了一些特别的问题,这些问题在其他地方并不存在,猜想是因为这里以学生为主,而学校的教材和教师与IT发展脱节严重。
1. C++虽然主要是以C的基础发展起来的一门新语言,但她不是C的替代品,不是C的升级,C++和C是兄弟关系。没有谁比谁先进的说法,更重要的一点是C和C++各自的标准委员会是独立的,最新的C++标准是C++98,最新的C标准是C99。因此也没有先学C再说C++的说法,也不再(注意这个"不再")有C++语法是C语法的超集的说法。
2. C++/CLI 和 C# 是微软的,它们与C和C++没有任何关系,虽然部分语法相似。但哪两种语言不相似呢?都是abc这26个字母。
3. 不要使用TC/TC++/BC/CB等古老的编译器来学习C/C++,因为它们太古老了,不支持新的C/C++标准。不要使用CBX/VC++6.0/VC2005等对C/C++标准支持不好的编译器,虽然这些编译器适合工作,但不适合学习,因为它们中的语法陷阱很多。记住唯一适合学习的编译器是gcc/mingw。[antigloss注:Dev-C++ 使用的编译器就是gcc & g++]
4. 不要用""代替<>来包含系统头文件,虽然有些编译器允许你这样做,但它不符合C/C++标准。
错误的示例:#include "stdio.h",#include "iostream"。[antigloss注:<> 用于包含标准头文件和系统头文件,"" 用于包含自定义头文件。标准似乎没有明确规定不准用 "" 包含标准头文件和系统头文件。使用 "" 包含标准头文件或者系统头文件只能说是一种不良风格。]
5. 不要将main函数的返回类型定义为void,虽然有些编译器允许你这样做,但它不符合C/C++标准。不要将函数的int返回类型省略不写,在C++中要求编译器至少给一个警告。错误的示例:void main() {},main() {} [antigloss注:C99和C++98都要求编译器对省略int至少发出一个警告]
6. 不要把VC++中的 #i......
C++头文件(2006-07-12 19:01:00)
摘要: 学了两天 C++了,基础部分基本上看了一遍,用到一些编译器时发现里面的头文件不一样,有的有后缀名而有的没有后缀名。后来上网看了下才发现好象是标准C++头文件没有后缀名,以下是在网上找到的C++头文件一览:
传统 C++
#include <assert.h> //设定插入点
#include <ctype.h> //字符处理
#include <errno.h> //定义错误码
#include <float.h> //浮点数处理
#include <fstream.h> //文件输入/输出
#include <iomanip.h> //参数化输入/输出
#include <iostream.h> //数据流输入/输出
#include <limits.h> //定义各种数据类型最值常量
#include <locale.h> //定义本地化函数
#include <math.h> //定义数学函数
#include <stdio.h> //定义输入/输出函数
#include <stdlib.h> //定义杂项函数及内存分配函数
#include <string.h> //字符串处理
#include <strstrea.h> //基于数组的输入/输出
#include <time.h> //定义关于时......
学C++了(2006-07-11 10:03:00)
摘要: haha,终于开始学C++了,马上就是大三了,好象好多学校大一或者大二就开始学C++了,不能等到课堂上再学了,趁这个暑假一定要先看看。还好前面的语法部分基本上不用看,大一学过C,上学期学数据结构又把C几乎是学了遍,后面的面向对象部分应该是这段时间的重要部分,幸运的是大二上学期又学过java(当时我也不知道学校为什么要把它当选课)不过现在好象没什么印象了。
我打算每天看三集视频教程,然后看下自己买的自认为经典的什么国外教程,至于上机练习什么时候心血来潮就上下,主要问题还是想玩会游戏,所以不知道一个暑假后自己能学到什么,期待中……。......
最近在干什么?(2006-06-04 00:45:00)
摘要: 转眼这个学期快过了,马上就是大三了。这学期真是快,回想下真是过的窝囊,过年在家时那时是多么的雄心壮志,他妈的来了就什么都不是了,成天游戏,无聊……。明天要考模电了,这个课我真是不敢恭维,没听过一节,最开始主要是听不懂,后来就是根本就不上了,竟然连最后一次课都没去,怎么我就变成这样了,哎……,希望明天能顺利的过。然后又是一个数字逻辑,接着就是四级了,接踵而来的考试真是让人窒息,还好有世界杯可以在以后不用对着电脑无聊了,不管怎么样这学期我最担心的还是四级,要是没过大三怎么混啊,算了不写了,正看比赛呢!......
C中的字符数组(2006-05-07 14:15:00)
摘要: 今天是五一的最后一天了,这个五一哪都没去,玩的也一般般,上午终于把那个数据结构的实验程序搞定了,说来真是惭愧,这么久了才弄完,主要是自己心思没用放在上面(这些天一直在玩游戏)。
这个实验程序大家应该都做过的就是那个魔王语言翻译的,通过这个程序又发现了自己程序设计的不少有待改进的地方,感受最深的是其中的字符数组使用的部分现在趁这个机会自己也好好总结下。
顾名思义字符数组就是用来存放字符数据的数组,其中一个元素存放一个字符。光这样说太枯燥了来看看这个程序吧:
#include <stdio.h>
#include <conio.h>
main()
{
char a[10],b[10];
int i;
clrscr();
gets(a);
for(i=0;a[i]!='\0';i++)
b[i]=a[i];
printf("i=%d,blen=%d\n",i,strlen(b));
puts(b);
getch();
}
大家都可以看出这是一个非常简单的程序,首先你认为这个程序有没有问题呢?当然这个程序的语法是没有任何错误的,但运行后的结果会是怎么样的呢?以下是我在tc2.0下的运行结果:
journey
i=7,blen=15
journey????????
上面的8个?是代表的乱码,为什么结果会是这样的呢,而且blen为什么是15呢?如果记得C中的字符数组的......
线性表(2006-04-09 01:16:00)
摘要: 现在数据结构学到了第6章了,现在对以前的各种基本的数据结构做下总结:首先是线性表,线性表是n个数据元素的有限序列,它又包括顺序表和链表。线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,其动态分配存储结构可如下表示:
#define LIST_INIT_SIZE 100 //存储空间的初始分配量
#define LISTINCERMENT 10//存储空间的分配增量
typedef struct
{
ElemType *elem;
int length;
int listsize;
}
顺序表的构造不太难,只要给elem一个指向存储空间的值即可,其他的操作不用多说大家应该都知道。
以下主要浅谈下链表,最开始其实链表应该是在大一就学的,由于某些原因而错过了,寒假在家自己看了下C中的这一章,所以今年开始学这个时感觉不是太费力,但这也给自己带来了不小麻烦,以至课程讲到第四章时自己又重新回到前面去看线性表。开始学时只是想到这个东西是怎么样的,没有去深入研究它为什么是这样的,当时也是仗着自己先看过的,幸亏现在发现得早自己的错误。
链表与线性表相比最大的特点就是它是用一组任意的存储单元来储存线性表的数据元素,储存单元可以连续也可以不连续。因此为了表示没个数据元素与其后继元素之间的逻辑关系,对每一个数据元素来说除了存储其本身的信息外,还需要一个存储一个指向其直接后继的信息。这两部分信息组成了数据元素的存储映象,即结点(Node)。它包括数据域和指针域。单链表的存储结构可表示如下:
typedef struct
{
ElemType data;
struct LNode *next;
}LNode......
jdk环境变量(2006-02-20 21:13:00)
摘要: 最近在网上看到有好多人问关于java运行程序老出错,其实这个如果排除了是程序本身有问题,那很大部分就应该是jdk的环境变量没有设置好。以前刚学java时也是这样,记得老师在黑板上讲过一次,但自己没好好听,因此总是不清楚path和classpath到底有什么用。前些时看过一本书后,有点感觉了,自己试后发现确实还行,希望能给初学java的同学一点点帮助。
jdk中的javac是进行编译java源程序的,其实可以在dos下通过把路径改到jdk的BIN目录下执行或者是在编译时就带上这些路径,但是经常这样肯定是很麻烦的。于是我们可以通过path来设置这个路径,这样每次进行编译时系统就能自动来寻找这个目录即“path=x:\……\jdk\bin”,这样只要是在bin目录下的任何命令就可以直接在dos下执行,这样设置后就可以通过javac命令来编译程序了(前提是程序没错),接着就是通过java来执行已经经过编译得到的class文件,这是可能也会有问题就是提示不能发现类之类的错误,这就和classpath有关系了,classpath是来寻找class文件的如果没有设置这个变量直接通过java来运行程序就会出现这个问题,这是也可通过上面所说的把路径改到jdk的lib下,但是显然也很不方便,这样通过classpath也能解决这个问题即“classpath=x:\……\jdk\lib\tools.jar;.”,注意后面的分号是来分隔路径的“.”是指的当前路径,为什么要指明当前路径呢,因为分号前面的是jdk的公共类库所在路径而我们的程序总会用自己的类吧,所以程序得到的类存放的当前路径也要放在里面。
还要一点就是如果以前装过jdk以后重新装时好象可以不设置classpath直接运行,不过不知道是普遍是不是这样,反正我有一次是这样的,如果不是请大家见谅。......
一个假程序员的心里话(转)(2006-02-15 13:16:00)
摘要:我从事程序开发三年了,不算长,也不算短。在别人眼里或许可以认为高手,但我自己明白,我什么也算不了。
记得还没毕业时,会用tc写几个cai软件,过了语言关,就以为自己是程序员了,很自喜,但毕业后去单位才发现,自己对于程序员这个行当来说仅是一个没入门的newbie.
很幸运的是遇到了张哥等校友,教了我很多,其间学会了web开发,数据库,也略懂了一些tcp/ip协议,以为自己懂很多了。其间到一家小公司作了一年技术总监,感觉不错。后来公司破产,换到一家外企。
在这里又有一番天地,发现自己什么也不是。编程? PHp方面我比他们走得早,会一些。说实话,语言这东西就象英语,很容易过去,关键是思维方式和经验(当然包括算法)。网络方面?在这里才开眼,我先前的那点功底只能算入门级,这个公司ccie就有4个,ccnp一堆。
接触了一些unix,专用服务器,大型数据库。
后来跳到一家网安公司,作了一些驱动。
现在在一家公司负责产品研发管理,同时也兼作开发人员。时常也有自己感觉不明白的东西,计算机这东西,需要学的太多,而且你不能学会了再用,一边学,一边用,用完了就扔掉。
以前在和luo谈话时有一些共识,现在的所谓程序好多根本不懂算法,数据结构一塌糊涂。我真的不敢叫他们是程序员,以为会点vb,能拖一些控件在上面就能叫程序?如果这样想,真的完了!
首先声明: 我本人学历不高,只能算是半个本科,也就是比专科高点,比本科差点。 但现在的教育好象真的是“教育”,面试了不少研究生,真的不敢恭维,水平不如好多专科生。
我并不是贬低学历,我本人也为学历吃了很多苦,现在还很辛苦地为了成为真正的本科,以至master而努力。但我觉得,好多人对不起头上的硕士帽。怪不得在新浪上看到,现在的硕士生只能相当于十年前的本科生,现在的doctor只能当
二十年前的master. 特别是那些不入流的学校,大部分人简直在混时间。偶然看过几场master毕业答辩,真的是欲哭无泪。青春无价,为什么要混?
当然,水平高的 bachelor,master,doctor也有。就象也有没有文凭的高手。 但总体素质真的很差。好多连c++都搞不明白(应聘c++程序员). 我面试人决不会出怪题,我会考虑水平和细心程度,但令我失望的太多。
这儿又让我......