通过慧通面试后写了一点总结,只把技术问题发上来……
【写在前面】
不明白今年慧通为什么会招聘那么多本科生,不知道进入慧通后会做些什么。我在重庆读书,是大四计算机系的学生,和慧通签了约,岗位是软件研发。欢迎情况和我相似 或者 已在慧通工作的人与我联系(QQ5648806,注明“慧通商务”),携手互助度过这段人生不确定的时期。下面的三个问题中,第一个是我至今没有解决的,欢迎高手赐教,谢谢!!!
【节选】
面试官先让我介绍一下自己的大概情况,我便把简历上早已写好的基本情况概括地说了一下,他听的时候不时翻看着我的简历,大概是感觉我说的内容都是简历上的重复,便打断了我的介绍,开始就着简历询问我做过的课程设计的情况,比如交通灯模拟系统用到了哪些芯片,等等。问完这些,他便开始出题目要我做。
第一个题目是二维数组和指针的问题,原题如下:
A[m][n]是一个二维数组,那么A、A[0]、&A、*A分别是什么意思?可以做必要的图示说明。
我没有把这个题目回答正确,解释A的时候便回答错了。我说A是一个指针的指针,他让我画图表示一下。我画了一个方阵;他说内存是线性的,我马上又改画了一个线性表格,将A[0]到A[m]的指向位置标明;他问我A在哪里,我犹豫的大概又一分多钟回答不出来,也不作声;他继续问道:难道指针就是一些很虚的东西随便指来指去吗,难道他们本身不在内存里吗,你们老师是这么教你的吗(大概意思)?我尴尬的说道:“我不知道。”我明白面试中不应该说这三个字,但这时我只能这样说了……他说:“你的第一个问题回答错了,后面的也没有办法问了。”然后,他又想要多给我一次机会似的,问我后面三个是什么意思,我说A[0]是指向数组首元素的指针,*A和A[0]意义完全相同,&A是三重指针。他没再说什么,这个题目就这样结束了。
第二个题目很简单:4G的内存有多少位地址。(32)
第三个题目要在纸上写一个算法,要写能运行的代码,算法如下:
P指向一个链表首结点,每个结点都有两个域,第一个域是int型数据,第二个域是指向此结点的后继的指针类型,要求从大到小对这个链表排序。
他让我坐到窗边的桌子旁去写,自己继续面试下一个人。虽然是很简单的一个题目,可是由于我当时仍很紧张,写一个函数的开头好几遍,都没有写正确(我的心理素质真的有待提高)。在他刚开始面试第三个人(我是第一个)不久,我就完成了,等到第三个人面试结束,我把代码拿给他看,代码如下:
typedef sturct Node
{
int data;
struct Node *next;
}Node;
Node *ChainSort( Node *p )
{
Node head;
Node *first, *pre_first;
Node *q, *pre_q;
head.next = p;
for( pre_first = &head, first = p;
first->next;
pre_first = pre_first->next, first = first->next )
for( pre_q = first, q = first->next;
q;
pre_q = pre_q->next, q = q->next )
if( first->data < q->data )
{
Node *tmp;
pre_first->next = q;
pre_q->next = first;
tmp = first->next;
first->next = q->next;
q->next = tmp;
}
return head.next;
}
他大体问了一下我的思路,又随便指了几处语句问了一下功能,最后说了一句:“你是我见过的做这个题目的学生里,定义变量最多的一个人。”我用无奈的笑容面对他,他又给了我一次机会说:“我给你限制一下条件,只准定义三个变量,你再重新做一遍。”我出去以后想到了“不交换结点,只交换其数据域内容”的思路,其实这个思路在第一次紧张地写代码时也有过,但我觉得不可能让我写这么简单的一个算法,必定要交换结点,所以才有了上面那些繁琐的代码。几分钟后修改完了,他还在面试一个学生,我就跟旁边的陌生人聊天。修改的代码如下:
void ChainSort( Node *p )
{
Node *first, *q;
int tmp;
for( first = p; first->next; first = first->next )
for( q = first->next; q; q = q->next )
if( first->data < q->data )
{
tmp = first->data;
first->data = q->data;
q->data = tmp;
}
}
看来他对我做的修改挺满意,又继续问道能不能只用两个变量,我说可以把tmp变量去掉,他又问只用一个变量呢?我思考半分钟,回答“我不会”。当他好像是在给我写评语时,我想到一个递归的思路,便在纸上写起代码,他看到后问我是不是在写只用一个变量的程序,我说我正试图用递归看能不能实现,他笑着说不用写了,你回去再思考嘛。
【总结】
时至今日,我仍然没有写出只用一个变量对链表排序的程序,他的第一个二维数组的问题也没能回答。我请教了很多人,大家都没有确定的答案。只是同学写的一段程序运行的结果让我有点不解:
#include<iostream>
using namespace std;
void main()
{ int a[2][3]={1,2,3,4,5,6};
Cout << &a << endl;
Cout << *a << endl;
Cout << a[0] << endl;
Cout << a << endl;
}
按照我的理解,应该只有*a和a[0]的输出是相同的,但结果是这四个的输出都相同。我更加糊涂了……
这次面试给了我很大的打击,也让我认清了一些问题。
首先,没有回答出第一个问题,使我改变了以前“我对C语言本身很了解”的错误想法;
其次,我学过的算法没有在编译器中实现,不能算作学懂;
最后,写程序时应该尽可能使空间复杂度最小。
我知道在以后工作的日子里,我要学习的东西还有很多,这次面试使我隐约看到了公司和学校的不同,我原本以为在学校要比在公司学习更踏实一些,但现在我感到似乎在公司的具体工作中学习更为踏实,学校里的弄虚作假反而使原本的象牙塔变得甚为浮躁。我应该在日后工作中,多总结这种不同,在总结中刻苦学习,提高自己的工作能力。
问题点数:20、回复次数:73Top
1 楼cunsh(村少)回复于 2005-12-03 03:20:32 得分 0
人家问你的是A、A[0]、&A、*A分别是什么意思?
你回答
Cout << &a << endl;
Cout << *a << endl;
Cout << a[0] << endl;
Cout << a << endl;
是没有用的呀.
我想的是 A 和 &A是一样的.而a[0]和*A 是一样的.
Top
2 楼lufer(半个我)回复于 2005-12-03 03:38:33 得分 0
Cout << &a << endl;
Cout << *a << endl;
Cout << a[0] << endl;
Cout << a << endl;
这是面试结束后,别的同学跟我讨论时写的一段代码,不是我当时的回答。我当时彻底晕了,只觉得这个题不会,也忘了具体说了什么话……
上面这四行程序的输出都一样,说明A、A[0]、&A、*A都指向一个地方
我期待高手的指点……Top
3 楼manplus(魅力加加)回复于 2005-12-03 03:50:24 得分 0
markTop
4 楼qxzheng(萧萧雨歇)回复于 2005-12-03 06:17:35 得分 0
这些指针的意思有差别,但是他们指向的都是你那个2维数组所在的首地址,这个是没有区别的,所以你输出的会是同一个值。记得谭浩强那本c语言书上写得很清楚,就像你士兵军训的时候,比如同一个位置,连长站上去就代表指向整个连队,排长站上去指向整个排队。。。但是他们实际上所占位置是相同的。Top
5 楼cunsh(村少)回复于 2005-12-03 06:24:49 得分 0
你对这4个东西做sizeof 运算看看.Top
6 楼aimt(伤逝)回复于 2005-12-03 09:08:44 得分 0
a[m][n]这个二维数组可以拆分成m个一维数组,即a[0],a[1],...,a[m-1],每个一维数组又含有n个元素.下边是一些地址的表示形式:
&a:是二维数组a的首行首列元素的地址,相当于&a[0][0]
*a:与*(a+0)或a[0]等效,相当于一维数组a[0] 0号元素的地址;
a[0]:见*a
a:是二维数组名,也就是二维数组a的首行首列地址;Top
7 楼lufer(半个我)回复于 2005-12-04 07:37:02 得分 0
=============================
#include<iostream>
using namespace std;
void main()
{
int a[2][3]={1,2,3,4,5,6};
cout<< a << ":" << sizeof( a ) << endl;
cout<< *a << ":" << sizeof( *a ) << endl;
cout<< &a << ":" << sizeof( &a ) << endl;
cout<< a[0] << ":" << sizeof( a[0] ) << endl;
cout<< a[1] << ":" << sizeof( a[1] ) << endl;
}
=============================
程序如上时,结果如下:
=========
0012FF68:24
0012FF68:12
0012FF68:24
0012FF68:12
0012FF74:12
=========
cunsh(校友录怎么写?求求大家了?) ,是你告诉我对四个指针做一下sizeof运算,你对这个结果有何见解呢???
哪位愿意详细地分析一下这个程序,并解释A、A[0]、&A、*A的含义及其间的异同呢?
Top
8 楼hell_wolf(浪花)回复于 2005-12-04 09:00:46 得分 0
我也在重庆读书:
我的理解是:他们的本质都是数组,不是指针
A :A[2][3]二唯数组
A[0]:3个元数的一唯数组
&A :A[2][3]的引用,只有在作为函数参数是才和A有小小的区别
*A :3个元数的一唯数组同A[0]Top
9 楼ahhy(蓝色海洋)回复于 2005-12-04 09:04:21 得分 0
1,sizeof( a ) = 24,说明指针a,可以寻访的整个内存空间占了24字节,也就是整个二维数组所占内存空间。其实你再测一下a++所指的地址,就可以明白a是如何寻访内存了(是行指针)
2,其他都可以类似的测试出来,还是靠你自己了:)Top
10 楼wugf0990(心语如歌)回复于 2005-12-04 09:18:04 得分 0
帅,大家都来发面试题啊,给别人是个借鉴,给自己也是一个提高。真的很不错呢!喜欢这样的朋友,见一个顶一个:-)Top
11 楼liumangxiong(陈世奎)回复于 2005-12-04 10:46:44 得分 0
加入收藏Top
12 楼trroy0525()回复于 2005-12-04 10:55:26 得分 0
a存放的是数组的首个元素的地址,但是它表示指向的是整个数组 所以sizeof(a)=24
a[0],a[1]分别表示指向的是该二维数组的第一维和第二维,其中每维又是一个一维数组
所以sizeof(a[0])=12Top
13 楼ww09124(wangwei)回复于 2005-12-04 15:14:17 得分 0
我也签了做测试,上面的兄弟一个月给的是多少啊?
Top
14 楼fflush(stdin)回复于 2005-12-04 16:16:30 得分 0
A[m][n]是一个二维数组,那么A、A[0]、&A、*A分别是什么意思?
A 类型为int (*)[n]的行指针,等价于&A[0],也就是指向二维数组中第一行的行指针
A[0] 二维数组中第一行的指针,类型是int *
&A 等价于A,不过估计没人会这么写
*A 等价于A[0],因为A[0]也就是*(A+0),即*ATop
15 楼wklucky(一辈子的孤单)回复于 2005-12-04 16:51:53 得分 0
mark一下Top
16 楼lufer(半个我)回复于 2005-12-05 02:08:38 得分 0
感谢大家的回复,看了大家的帖子,我已经对这个问题有了进一步的了解,下个星期去一次书店翻一下相关的书籍,有个系统的认识以后再把关于这个问题的东西整理上来……
我签的是在成都工作,一个月2800的基本工资,好像是做测试工作,最近看了一个测试工程师的blog,感觉获益匪浅,推荐大家看看:
http://blog.csdn.net/xdxg/
去成都前先去深圳华为大学培训,好像是两个星期左右,谁经历过华为大学的培训,希望能给小弟介绍一下(我还是蛮期待这次培训的,听说是半军事化管理)。谢谢!!!Top
17 楼lujie84(啊米托佛)回复于 2005-12-05 15:37:37 得分 0
引用:a[m][n]这个二维数组可以拆分成m个一维数组,即a[0],a[1],...,a[m-1],每个一维数组又含有n个元素.下边是一些地址的表示形式:
&a:是二维数组a的首行首列元素的地址,相当于&a[0][0]
*a:与*(a+0)或a[0]等效,相当于一维数组a[0] 0号元素的地址;
a[0]:见*a
a:是二维数组名,也就是二维数组a的首行首列地址;
aimt(还说自己是高手……)
分析的很好啊!我要多多的学习学习。
Top
18 楼wljjacob(千百)回复于 2005-12-12 20:22:29 得分 0
A[m][n]是一个二维数组,那么A、A[0]、&A、*A分别是什么意思?
其实A,和A[0]都是一个指针,而且指针值也相同。A是指向整个二维数组,A[0]是指向第一行。&A就是存放这个指针值的地址。*A嘛,就是A[0]。
楼主,我加你QQ。Top
19 楼wljjacob(千百)回复于 2005-12-12 20:33:29 得分 0
仔细看了一下上面各位的灰铁,还是fflush(stdin)说得最有理。我上面说的有问题。Top
20 楼tsrs(调试人生)回复于 2005-12-12 21:04:06 得分 0
呵呵,比我好,我去YAHOO面试的时候也隐约的看到了自己存在太多的不足,但没楼主幸运哈,最终被拒了。
回来后仔细想了想,现在正努力学习呢~
呵呵……
希望早日找到属于我的工作。:)Top
21 楼luvybird()回复于 2005-12-13 00:09:42 得分 0
mark
Top
22 楼rockefeller8(洛克菲勒)回复于 2005-12-13 15:41:45 得分 0
支持一下!Top
23 楼langzi520(虽左但右)回复于 2005-12-14 15:17:46 得分 0
markTop
24 楼xiaojijun(lele)回复于 2005-12-19 22:55:18 得分 0
我也是跟他们签约了的,不过我是作软件测试的,我今天在运行程序的时候出现了一个错误,希望各位高手帮我解决一下,首先谢谢各位哈!
无法在WEB服务器上进行调试,发送HTTP请求时出现了服务器端的错误:这个问题如何解决,请教各位高手哈!非常感谢Top
25 楼ak_2005(★★★★★)回复于 2005-12-20 00:54:53 得分 0
markTop
26 楼gokill(天上的虫子)回复于 2005-12-20 10:08:11 得分 0
第三道题如果用递归怎么来实现?
有没有高手能解答一下?Top
27 楼gokill(天上的虫子)回复于 2005-12-20 12:09:26 得分 0
Node* ChainSort( Node *p )
{
Node *first;
int tmp;
if(p->next == NULL)
return p;
for( first = p; first->next; first = first->next )
if( first->data < ChainSort(first->next))
{
tmp = first->data;
first->data = first->next->data;
first->next->data = tmp;
}
return p;
}
------------------
这个算不算递归算法?
有没有问题,有人给看看没,呵呵Top
28 楼chenang(cha)回复于 2005-12-20 13:25:05 得分 0
解释一下我对第一题的理解,
对于二维数组int A[m][n]
A = &A = A[0] = *A = &A[0],结果是首地址
A是数组名,不占存储空间,他们不同在于
A是一个指向一个一维数组的指针,相当于int (*aa)[2] = A;
A[0]是一个指针,指向数组的第一列(一维数组)的地址,相当于int *ab = A[0]
&A是一个指针,指向的是一个二维数组,即int (*ac)[2][2] = &A;
*A是数组的首地址,即int *ad = *A;
总结一下:
A的类型是int[m][n],一个二维数组,相当于指向一维数组的指针
A[0]的类型是int[n],一个一维数组,相当于一个int类型的指针
&A的类型是int (*)[m][n],一个指向二维数组的指针
*A的类型是int [n]= A[0]
Top
29 楼forthelichking(丢大便)回复于 2005-12-20 14:02:15 得分 0
慧通不是3500+500么?我同学今年毕业的,在里面,本科毕业进去基本上都是搞测试的,很累,干了4个月,我同学已经开始想走人了。Top
30 楼luoqiang2008(夜行侠)回复于 2005-12-20 15:32:42 得分 0
UP
Top
31 楼lwplay(轻松)回复于 2005-12-20 21:47:12 得分 0
gokill(天上的虫子):我觉得if( first->data < ChainSort(first->next)) 这句有问题ChainSort(first->next))得到的是node型指针,怎么跟int型的data值比较?
Top
32 楼gokill(天上的虫子)回复于 2005-12-21 09:08:28 得分 0
汗~我糊涂,这段加个-〉data。
我是说,我觉得我写的算法本身有问题,有没有人给看看?Top
33 楼orange017(金枪鱼)回复于 2005-12-21 09:46:10 得分 0
收藏了Top
34 楼rockhard(不签名)回复于 2005-12-21 11:14:45 得分 0
A[m][n]是一个二维数组,那么A、A[0]、&A、*A分别是什么意思?
A: 一个指针,与定义int (*p)[5];中的p代表的意义一样。
A[0]:上述指针所代表的一个元素(第一个元素而已),该元素有n个int型变量
&A:整个A[m][n]数组在内存中的起始地址,也可解释为A指针的地址
*A:与A[0]等价,得到A数组的第一个元素,注,该元素是int X[5]类型,非int型
Top
35 楼rockhard(不签名)回复于 2005-12-21 11:16:28 得分 0
将上在的5换为n就是int A[m][n]
Top
36 楼HuangQQ(黄QQ)回复于 2005-12-21 11:23:44 得分 0
这几个的意思是明白的,
不明白为什么长度会不一样???
=============================
#include<iostream>
using namespace std;
void main()
{
int a[2][3]={1,2,3,4,5,6};
cout<< a << ":" << sizeof( a ) << endl;
cout<< *a << ":" << sizeof( *a ) << endl;
cout<< &a << ":" << sizeof( &a ) << endl;
cout<< a[0] << ":" << sizeof( a[0] ) << endl;
cout<< a[1] << ":" << sizeof( a[1] ) << endl;
}
=============================
程序如上时,结果如下:
=========
0012FF68:24
0012FF68:12
0012FF68:24
0012FF68:12
0012FF74:12
=========
Top
37 楼lovepet(想着)回复于 2005-12-21 13:55:56 得分 0
#include "stdio.h"
#include "conio.h"
main()
{
char a[]="123456";
printf("%s\n",&a);
printf("%c\n",*a);
printf("%c\n",a[1]);
printf("%s\n",a);
getch();
}Top
38 楼lovepet(想着)回复于 2005-12-21 13:56:58 得分 0
楼上的是用的什么语法啊?csharp?Top
39 楼lovepet(想着)回复于 2005-12-21 14:09:23 得分 0
#include "stdio.h"
#include "conio.h"
main()
{
int a[6]={1,2,3,4,5,6};
printf("%d\n",&a);
printf("%d\n",*a);
printf("%d\n",a[1]);
printf("%d\n",a);
getch();
}
改成int类型的,1\4输出为一个负数,如果a是int类型的,取&a,a具体为什么呢?请前辈指点~谢谢~Top
40 楼rockhard(不签名)回复于 2005-12-21 15:40:56 得分 0
第三题: 如果可以改结点中的值,可以只用一个变量,见下在的代码。如果是修改结点的next域进行交换结点,没找到解决办法。哪位有代码发封存到rockhard@sohu.com,谢谢。
typedef struct NODE{
int value;
struct NODE * next;
} * pNode;
//先找到最大的value,放在第一个元素处,
//然后再在剩下的元素中找到次大的value值,放入第二个元素处......
void sort(pNode head)
{
pNode current;
while(head)
{
for( current=head->next; current; current=current->next )
{
if(current->value > head->value)
{
//交换两结点的value值,可以不用中间变量
//即交换变量a,b可用如下方法
//a=a+b;
//b=a-b;
//a=a-b;
current->value = current->value + head->value;
head->value = current->value - head->value;
current->value = current->value - head->value;
}
}
head=head->next;
}
}
Top
41 楼wcg_jishuo()回复于 2005-12-24 20:56:10 得分 0
是不是要把c语言真真理解要学好汇编才行啊?Top
42 楼chenys0921(南岭雪)回复于 2006-01-12 21:14:46 得分 0
一个变量排序,经过测试,各位高人是否还有更多良方
void chainsort(node * head)
{
node * p;
for(;head->next;head=head->next)
for(p=head->next;p;p=p->next)
{
if(head->data<p->data)
{
head->data=head->data^p->data;
p->data=head->data^p->data;
head->data=head->data^p->data;
}
}
}Top
43 楼longlongago8(南瓜)回复于 2006-01-12 22:21:28 得分 0
4G的内存有多少位地址Top
44 楼longlongago8(南瓜)回复于 2006-01-12 22:22:45 得分 0
4G的内存有多少位地址
请问这句话什么意思?
Top
45 楼cutegang(醉柠檬)回复于 2006-01-12 22:45:11 得分 0
我也在疑惑这家公司怎么招这么多人。
看看面试的题目,说明未来的工作岗位技术是不需要的。Top
46 楼xxdashi(很想搞3G)回复于 2006-01-13 11:52:54 得分 0
应该说要的是机器人,只帮做产品的COPYTop
47 楼marine12(副才科)回复于 2006-01-13 12:59:43 得分 0
第一个问题是行指针和列指针的问题,很简单
A其实就是行指针,A+1就是指向第二行,就是A[1]了,但是如果你要指向A[1][0],那就需要加*了
就是*A[1].于是如果指向第二行第二列就是*(*(A+1)+1)
这样说明白吗?Top
48 楼danfeng827()回复于 2006-01-13 13:59:20 得分 0
4G的内存有多少位地址???应该是35位把Top
49 楼danfeng827()回复于 2006-01-13 14:46:43 得分 0
4G的内存有多少位地址???应该是35位把
Top
50 楼danfeng827()回复于 2006-01-13 14:55:36 得分 0
错了,不是35位Top
51 楼wildfire555(阿猫)回复于 2006-01-13 17:40:39 得分 0
32bit
11111111111111111111111111111111 二进制
4294967295 十进制 约等于4GTop
52 楼lengsehuoyan(努力学习C语言!)回复于 2006-01-14 09:25:28 得分 0
支持一下!Top
53 楼gdszcbwq(coer)回复于 2006-01-14 16:37:08 得分 0
我刚从里面辞职出来。Top
54 楼ww09124(wangwei)回复于 2006-01-14 19:28:57 得分 0
去HT是每天加班很累吧呵呵Top
55 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2006-01-15 00:02:54 得分 0
HT 试用是多少?Top
56 楼JohnsonShu(野蛮人)回复于 2006-01-15 12:46:59 得分 0
楼主总结的挺不错的。
不知道楼主这个水平最后能找到月薪多少的工作。
Top
57 楼lovememememe(请你为我在掌声中舞动)回复于 2006-02-12 16:05:15 得分 0
markTop
58 楼qianjinrail(呵呵)回复于 2006-02-12 19:01:18 得分 0
markTop
59 楼nicenight(SeeSea)回复于 2006-02-13 11:33:50 得分 0
面试真有点感觉吹毛求疵:(Top
60 楼vc_hunter(飞天御箭)回复于 2006-02-13 12:31:16 得分 0
第一个题目是二维数组和指针的问题,原题如下:
A[m][n]是一个二维数组,那么A、A[0]、&A、*A分别是什么意思?可以做必要的图示说明。
A是指向一个大小为m*n的线性地址的首地址的指针
a[0]里装的是首地址加偏移量0*0位置的指针
&A是得到A本身的地址
*A是得到A指向的地址里的值
上面是概念,可能有点模糊
比如
地址:2000为A的地址,地址2000里的值为5000,这个是数组的首地址
&A得到的是2000,*A得到的是5000里的值,就是以5000为起始地址,里面32位数据所代表的值,比如a[0][0]里面是1,那么*a就是1
其实A[m][n]的形式转换为另一种形式就容易理解了
如:
int *p=new int[m];
p自己有地址,p里面的值是数组的首地址,
&p是自己的地址,p是数组的地址,*p是p[0]的值
Top
61 楼jjduan185(duanjigang)回复于 2006-02-14 11:02:53 得分 0
我刚面试完,叫我过去,还在犹豫中Top
62 楼Andy_L(波大没脑)回复于 2006-02-15 15:37:40 得分 0
我也是今年毕业的,我很多同学都签了 HT公司,薪水是这样的:3250 !就是工资加补助。
我在西安。Top
63 楼giggsjw(秋叶)回复于 2006-02-15 17:41:02 得分 0
支持一下!Top
64 楼guest0708()回复于 2006-02-17 13:49:00 得分 0
4GB = 4 * 1024MB = 4 *1024 * 1024kb = 4 * 1024 * 1024 * 1024b
= 2^2 * 2^10 * 2^10 * 2^10
= 2^(2 + 10 + 10 + 10)
= 2^32
也即32位
Top
65 楼yoyo82(优游)回复于 2006-02-17 14:41:45 得分 0
∵ G=2^30,4=2^2
4G=2^32
∴ 是32位地址线
Top
66 楼zjpixyniannian()回复于 2006-02-20 22:09:17 得分 0
//只用一个变量
#include <stdio.h>
#include <malloc.h>
typedef struct tagNODE
{
int m_n;
tagNODE * pNext;
}
NODE;
void Sort(NODE * pHead)
{
if(!pHead || !pHead->pNext)
return ;
while(pHead)
{
NODE * pNode = pHead->pNext;
while(pNode)
{
if(pHead->m_n > pNode->m_n)
{
pHead->m_n = pHead->m_n + pNode->m_n;
pNode->m_n = pHead->m_n - pNode->m_n;
pHead->m_n = pHead->m_n - pNode->m_n;
}
pNode = pNode->pNext;
}
pHead = pHead->pNext;
}
}
int main()
{
NODE * pHead=NULL,*pNode=NULL;
pHead = (NODE *)malloc(sizeof(NODE));
pHead->m_n = 0;
pHead->pNext = NULL;
for(int i = 1; i < 10; i++)
{
pNode = (NODE *)malloc(sizeof(NODE));
pNode->m_n = i;
pNode->pNext = pHead;
pHead = pNode;
}
Sort(pHead);
}Top
67 楼shiqing8899(米豆)回复于 2006-02-20 23:02:33 得分 0
顶Top
68 楼ice3745()回复于 2006-02-21 00:52:52 得分 0
UP^_^ing............Top
69 楼yjf7888(seeking a place 找工作了location:Chengdu)回复于 2006-02-21 08:54:31 得分 0
不错,知道总结Top
70 楼qtshalazhang(沙拉张)回复于 2006-02-21 12:54:04 得分 0
基础不牢 地动山摇啊 呵呵Top
71 楼blh(当你不割肉时,你的损失只是个数字,当你割肉时,你的损失就是你的肉)回复于 2006-02-21 13:52:33 得分 0
The array variable does not occupy any additional memory (pointer variable will occupy 4 bytes memory in 32-bits OS), its address is the same with one of the first element of array.
for example: int a[2][3];
It assumes that the address of array a is 0x1234567, then
a == &a == a[0] == &a[0] == &a[0][0] == *a == 0x1234567
Top
72 楼robertcarlos(还我信誉分)回复于 2006-02-21 14:15:58 得分 0
#include<iostream>
using namespace std;
void main()
{ int a[2][3]={1,2,3,4,5,6};
Cout << &a << endl;
Cout << *a << endl;
Cout << a[0] << endl;
Cout << a << endl;
}
二维数组,他们都是指向同一个地址所以上面的结果是一样的。
blh(老猫)的意思已经很清楚了。Top
73 楼jjj346()回复于 2006-02-21 14:25:16 得分 0
......
我是大二的,学软件,上学期学C时老师说二维数组不用,自己看了一点没怎么懂,就没细看,寒假带了C++回来又没怎么看,看来是不是太急于求成了~~~~Top




