??xml version="1.0" encoding="utf-8" standalone="yes"?>
java.net http://www.java.net
http://strutstestcase.sourceforge.net (StrutsTestCase是基?span lang=EN-US>Junit的一个方便测?span lang=EN-US>struts框架的测试框?
Lomboz http://www.objectlearn.com/index.jsp (J2EE plugin for Eclipse)
htmlArea http://sourceforge.net/projects/itools-htmlarea/ (所见即所得的在线HTML~辑?
XmlBuddy http://www.xmlbuddy.com/ (XML Editor plugin for Eclipse)
JFreeChart http://www.jfree.org/ (用于生成图表的项?
EclipseME http://eclipseme.sourceforge.net/ (J2ME Developmnt Plugin for Eclipse)
mvnForum http://sourceforge.net/projects/mvnforum/ (论坛)
jChatBox http://www.javazoom.net/index.shtml (用servlet实现的WEB聊天引擎)
POI http://jakarta.apache.org/poi/index.html (用于处理Excel,WORD{文档的目)
FileUpload http://jakarta.apache.org/commons/fileupload/ (用于处理HTTP文g上传得项?
PDFBox http://sourceforge.net/projects/pdfbox/ (处理PDF文档的项?
Lucene http://jakarta.apache.org/lucene/index.html (搜烦(ch)引擎)
Digester http://jakarta.apache.org/commons/digester/ (处理XML信息的项?
DBCP http://jakarta.apache.org/commons/dbcp/ (数据库连接池)
AXIS http://ws.apache.org/axis/ (WebService 的实现框?
Jetspeed http://portals.apache.org/jetspeed-1/ (Portal)
HSQLDB http://sourceforge.net/projects/hsqldb/ (Im memory Database Engine)
CEWOLF http://sourceforge.net/projects/cewolf/ (一套标{ֺ实现Web报表,使用的是jFreeChart引擎)
Struts Menu http://sourceforge.net/projects/struts-menu/ (ZStruts的Web菜单目)
htmlparser http://sourceforge.net/projects/htmlparser/ (用于解析HTML信息的项?
Mondrian http://sourceforge.net/projects/mondrian/(Open Source OLAP Database)
ProGuard http://sourceforge.net/projects/proguard/(Java的淆器)
InfoGlue http://sourceforge.net/projects/infoglue/ (J2EE 内容理pȝ)
JPivot http://sourceforge.net/projects/jpivot/ (ZWEB的OLAP 展现)
http://java-source.net/
(5)几个常用JAVA开源项目的地址荟萃:
Lomboz http://www.objectlearn.com/index.jsp (J2EE plugin for Eclipse)
htmlArea http://sourceforge.net/projects/itools-htmlarea/ (所见即所得的在线HTML~辑?
XmlBuddy http://www.xmlbuddy.com/ (XML Editor plugin for Eclipse)
JFreeChart http://www.jfree.org/ (用于生成图表的项?
EclipseME http://eclipseme.sourceforge.net/ (J2ME Developmnt Plugin for Eclipse)
mvnForum http://sourceforge.net/projects/mvnforum/ (论坛)
jChatBox http://www.javazoom.net/index.shtml (用servlet实现的WEB聊天引擎)
POI http://jakarta.apache.org/poi/index.html (用于处理Excel,WORD{文档的目)
FileUpload http://jakarta.apache.org/commons/fileupload/ (用于处理HTTP文g上传得项?
PDFBox http://sourceforge.net/projects/pdfbox/ (处理PDF文档的项?
Lucene http://jakarta.apache.org/lucene/index.html (搜烦(ch)引擎)
Digester http://jakarta.apache.org/commons/digester/ (处理XML信息的项?
DBCP http://jakarta.apache.org/commons/dbcp/ (数据库连接池)
AXIS http://ws.apache.org/axis/ (WebService 的实现框?
Jetspeed http://portals.apache.org/jetspeed-1/ (Portal)
HSQLDB http://sourceforge.net/projects/hsqldb/ (Im memory Database Engine)
CEWOLF http://sourceforge.net/projects/cewolf/(一套标{ֺ实现Web报表,使用的是jFreeChart?
Struts Menu http://sourceforge.net/projects/struts-menu/ (ZStruts的Web菜单目)
htmlparser http://sourceforge.net/projects/htmlparser/ (用于解析HTML信息的项?
Mondrian http://sourceforge.net/projects/mondrian/ (Open Source OLAPdatabase)
ProGuard http://sourceforge.net/projects/proguard/ (Java的淆器)
InfoGlue http://sourceforge.net/projects/infoglue/ (J2EE 内容理pȝ)
JPivot http://sourceforge.net/projects/jpivot/ (ZWEB的OLAP 展现)
HttpClient http://jakarta.apache.org/commons/httpclient/ 处理http客户端的接口
考虑数组的指针的时候我们要同时考虑cd和维数这两个属性。换一句话Q就是说一个数l排除在其中存储的数|那么可以用类型和l数来位|表CZ的种cR?/p>
AQ一l数l?br /> 在c和c++中数l的指针是数组的v始地址Q也q一个元素的地址Q,而且标准文档规定数组名代表数l的地址Q这是地址数值层面的数组表示Q。例如:(x)
int a[10];int *p;
p=&a[0]//和p=a是等L(fng)Q?br />
因ؓ(f)a是数l名Q所以他是该数组的地址Q同时因为第一个元素ؓ(f)a[0]Q那?amp;a[0]也代表了(jin)该数l的地址。但是我们是不是p一个数l名和该数组的第一个元素的&q算是一回事呢?在一l的时候当时是的,但是在高l的时候,我们要考虑到维数给数组带来的媄(jing)响?br /> a[10]是一个数l,a是数l名Q它是一个包?0个intcd的数l类型,不是一般的指针变量噢!Q虽然标准文档规定在c++中从int[]到int*直接转换是可以的Q在使用的时候似乎在函数的参Cؓ(f)指针的时候,我们该数组名赋值没有Q何异P(j)Qa代表数组的首地址Q在数字层面和a[10]的地址一栗这h们就可以使用指针变量以及(qing)a来操作这个数l了(jin)?br />所以我们要注意以下问题Q?/p>
Q?Q?p[i]和a[i]都是代表该数l的Wi+1个元素;
Q?Q?p+i和a+i代表?jin)第i+1个元素的地址Q所以我们也可以使用 *Qp+IQ和*Qa+IQ来引用对象元素Q?br />Q?Qp+1不是对于指针数量上加一Q而是表示从当前的位置跌当前指针指向cd长度的空_(d)对于win32的int?byteQ?/p>
B)多维数组
对于二维数组a[4][6];׃数组名代表数l的起始地址Q所以aQ第一层)(j)和第一个元素a[0][0]地址的数字是相同的,但是意义却是不同的。对于该数组我们可以理解为:(x)a的一l数l(W一层)(j)Q它有四个元素a[0]、a[1]、a[2]、a[3]Q第二层Q,而每个元素又含有6个元素a[0][0],a[0][1],a[0][2],a[0][3],a[0][4]Qa[0][5]Q第三层Q?…到此我们终于访问到?jin)每个元素?jin)Q这个过E我们经历了(jin)Qa->a[0]->a[0][0]Q?br /> 整体来讲Qa是一??列的二维数组Qa表示它指向的数组的首地址Q第一个元素地址&a[0]Q?同时a[0]指向一行,它是q个行的名字Q和该行的第一个元素的首地址相同Q第一个元素ؓ(f)地址&a[0][0]Q)(j)。所以从数字角度_(d)(x)a、a[0]?amp;a[0][0]是相同的Q但是他们所处的层次是不同的?br /> 既然a代表二维数组Q那么a+ipC它的第i+1个元?Qa+iQ的地址Q而在二维数组?br />*Qa+iQ又指向一个数l,*Qa+iQ?j表示q个数组的第j+1个元素的地址Q所以要讉Kq个元素可以使用 *Q?Qa+iQ?jQ(也就是a[i][j]Q?br />他们的示意图为(虚线代表不是实际存在的)(j)Q?/p>
对照q个图,如下的一些说法都是正的Q对于a[4][6]Q:(x)
ȝ一下就是:(x)我们对于二维指针aQ他指向数组a[0Q?Q?Q?]Q?Q可以他降U到W二层次Q这?a指向了(jin)W一个真正的数组。对于其他的情况我们也可以采用相同的方式Q对于其他维数和cd的数l我们可以采用相cM的思想?br />
说到指向数组的指针,我们q可以声明一个指针变量让它指向一个数l。例如:(x)
int Q?pQ[5]Q?/pre>q时p是一个指针,要指向一个含?个intcd元素的数l,指向其他的就?x)出现问题?br />q个时候我们可以用上面的什么东西来初始化呢Q?br />我们可以使用*a,*(a+1)Qa[2]{?br />原因很简单:(x)我们在一个二l的数组中,那么表达方式有上面的怺cM的意义呢Q只有 *a,*(a+1)Qa[2]{,
C)指针数组
一个指针数l是指一个数l中的每个元素都是一个指针,例如Q?/p>int *p[10];//而不能是int (*p)[10]或?/p>
char *p[10];此时p是一个指针(数g?amp;p[0]一P(j)Q?br />在前面有int t[10]Q?/p>
int * pt=t;//使用pt指向t那么q里我们用什么指向int *t[10]中的t呢?我们要用一个指针的指针Q?/p>
int **pt=t;q是因ؓ(f)Q在int *t[10]中,每个元素是指针,那么同时t又指向这个数l,数组上和&t[0]相同Q也是指向t[0]Q指向一个指针变量,可以说是一个指针的指针?jin),所以自然要?/p>
int **pt;
D)指针的指?br /> 一个指针变量内部可以存储一个|q个值是另外一个对象的地址Q所以我们说一个指针变量可以指向一个普通变量,同样q个指针变量也有一个地址Q也是说有一个东西可以指向这个指针变量,然后再通过q个指针变量指向q个对象。那么如何来指向q个指针变量呢?׃指针变量本n已经是一个指针了(jin)Q右|(j)Q那么我们这里就不能用一般的指针?jin),需要在指针上体现出来这些特点,我们需要定义指针的指针Q二重指针)(j)?/p>int *p1=&i;int**p2=&p1Q?/pre>l合以上的所有点Q下面是我们常常看到一些匹配(也是l常出错的地方)(j)Q?/p>
int a[3],b[2][3],c,*d[3];void fun1(int *p)Qvoid fun2(int (*p)[3]);void fun3(int **p);void fun4(int p[3]); void fun5(int p[]);void fun6(int p[2][3]);void fun7(int (&p)[3]);函数 不会(x)产生~译时刻的可能|但逻辑上不一定都对)(j)
Q?span lang="EN-US">b+iQ?/span> | ||||
B) 函数的指针参?br /> 函数指针可以作函数的参数Q例如我们有一个积分的法Q对于不同的数学函数可以q行U分Q我们这里假讑և数都是一元的Q; q里的最后的参数是一个函数的指针Qƈ且被讑֮~省gؓ(f)0。这个函数返回一个|同时需要一个参数。假如加入我们有q样的一个函敎ͼ(x) 那么我就可以使用?jin)?br /> C) q回指针的函?br /> 一个函数的q回是函数的重要接口之一Qc++的一个重要的强大的功能就是能够设计够复杂和好用的用戯定义cd。而同时处理和传递这些类型也是很ȝ(ch)的一件事情,我们不想把我们的旉都花在这些对于我们的实际工作没有很实质帮助的拯上,解决q个问题p依赖我们的接口设计:(x)c和c++都提供了(jin)相应的解x(chng)案,在c++中我们可是用引用,讲他们作为函数的实际参数Q或者我们在函数的实际参C使用一个指针等。同h们还可以使用一个函数返回一个指针:(x)但是q是一个很不好解决的问题! q个变量在我们的函数l束的时候就被销毁了(jin)Q尽地址可以传出去,但是q个地址已经不存在了(jin)Q已l不能用的东西Q在q个函数之外却不知道Q难免要出错Q?br />同时我还?sh)(x)有一个比较麻?ch)的问题Q用newQ又Ҏ(gu)造成内存泄露 我们在函数内部用了(jin)一个newQ分配了(jin)一个空_(d)q样传出来也是可以! 三、类成员的指?/strong> cL员和一般的外部变量怺比较Q不同就是它所在的域不同,q个域很重要Q它军_?jin)该变量可以使用的范围。那么一个指针如果要指向cȝ成员函数或者成员变量,那么除了(jin)要表辑֮的返回类型、参数列表或者类型之外,那么q要说明它所指向的变量(或者函敎ͼ(j)的域Qؓ(f)?jin)说明该域我们要使用cd限定Q?/p> 我们定义成员的指针ؓ(f) Z(jin)使用q些指针Q我们需要用该cd的变量或者指针?/p> 那么调用的方式ؓ(f)Q?/p> q个看v来似乎很奇怪!但是只要你想到我们定义的指针被限定在?jin)类域中了(jin)(我们在开始定义的使用使用?jin)NJUPT:: Q,q么使用也是很自然的?br /> 如果一个类q有一些静(rn)态成员变量和?rn)态成员函敎ͼ那么我是否也惌样用呢Q?br />{案是不用,?rn)态成员我们就可以象用外部的普通成员(sh)样定义一个指针或者函数指针来讉K可以了(jin)Q究其原因主要是q个成员的类型性质军_的?/p> 1?int *p=new int(0); 1、newq算W返回的是一个指向所分配cd变量Q对象)(j)的指针。对所创徏的变量或对象Q都是通过该指针来间接操作的,而动态创建的对象本n没有名字? \0 (tng) Q字W串l束标志Q?br />\n (tng) Q换行(ascq?0Q; (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) |