学生(ID-924616):
老师,一个函数如果定义时是这样: int f(int x,char y) { ……函数体…… } 那么声明时是int f(int x,char y)还是int f(int,char)还是两者都可以??
吴老师:
声明时,只写类型就行了 int f(int,char);
写上名称也行,而且名称可以随便写,C++(实际上是C语言,这都是C语言)并不需要名称,名称是给人看的 int f(int a,char b); int f(int m,char n);
|
学生(ID-D3B25C):
p=p->link,q->link=r
这是什么意思我知道。
但是为何要这么写?
为什么
r = q; q = p; p = p->link; q->link = r; 就能达到invert的效果? 怎么理解这四行代码?
吴老师:
这个解答比较长,这里是接着上一个解答 ...
while(p) { //p和q关系是这样的: q<--p //在循环的某一步中,例如: 0<--A<--B-->C-->D-->E-->0 // q<--p, q指向B, p指向C,因为B已经反转了,现在要指针向右移动 // q<--p,向右移动后q指向C, p指向D ListNode<Type> *r = q; //先要用r把q,也就是B保存起来, //如果不保存,C就找不到B,不能做B<--C了! q = p; // q向右移动,q原来指向B,现在指向C p = p->link; //p向右移动,p现在指向D,下一步就要反转D q->link = r; //这里进行反转, q现在指向C,反转后q的下一个是B,B已经被r先保存起来了 } first = q; }
|
学生(ID-9ADCFF):
补充问题: 还有,我怎么知道C的函数置换成c#的函数会变成什么类型,比如C中有int printf(const char * Format,...)置换成C#是什么?
吴老师:
这个问题好:这就是我们这门课要学习的最主要内容!
没有简单的方法一下子学会,一个一个地学,把每一种类型都学会,只能如此。
第一个例子用的是puts,没有用printf,就是因为puts的参数比较简单,在C#里声明puts函数很容易,在C#里声明printf函数就没那么容易了,因为printf有一个变长参数!
|