一个专科的 C 语言期末考试题,我居然不知道咋做。

2017-07-03 17:08:40 +08:00
 coderluan

https://ws2.sinaimg.cn/large/006Svwogly1fh6t12pt42j30ti0sfq4v.jpg

原谅我标题党,朋友发的,出题者口口声声说这是书上找的,肯定不会错,专科生中能干好这一行的也是不容易。

5351 次点击
所在节点    问与答
58 条回复
coderluan
2017-07-03 17:57:07 +08:00
@liuhaotian #16 你这么说就好,坑不坑都行,有错就好,上边一堆没错的弄的我胆战心惊。
xdeng
2017-07-03 17:59:42 +08:00
vc6 报 cannot convert parameter 1 from 'int [5]' to 'int'

原来声明可以写在函数里的,是我忘了。
hx1997
2017-07-03 18:08:41 +08:00
@coderluan 您题目里说不知道怎么做,肯定会让我们以为是空不知道怎么填啊,自然就没注意其他的了。
coderluan
2017-07-03 18:12:48 +08:00
@hx1997 #23

额,我说自己是标题党了,现在这贴已经完全跑题了,我现在也只剩好奇这种写法是不是真的在哪种旧的标准下是可行的。
hjc4869
2017-07-03 18:16:44 +08:00
@coderluan MSVC 里写成 fun(int)没有问题(最新的也是),指针 /栈上缓冲区都可以隐式转换成 int。不过 64bit 环境下 int 是 32bit 的,代码不工作。

如果考题或者教材里说过环境是 MSVC 的话,这个也不算错吧?毕竟 C 语言那么混乱,根本没个事实上的统一标准……
xrui
2017-07-03 18:17:16 +08:00
很不理解,本来就没错啊。函数定义在 main 函数里的办法就是书上写的呀?谭浩强都这么写,有什么错?照着书出了这个题有什么问题?楼主是不相信书上这么写过吗?
coderluan
2017-07-03 18:21:38 +08:00
@hjc4869 #25 单独写 fun(int)没问题,但是后面 int fun(int a[5])这个暂时没发现能过的编译器。

其实这个贴是吐槽贴的,无论是错的还是过时的,都是不影响吐槽的,但是现在已经彻底歪楼成考古帖了。
hx1997
2017-07-03 18:23:46 +08:00
@xrui hhhh,高级黑,不过那叫声明吧。
xrui
2017-07-03 18:24:26 +08:00
@hx1997 口误😂
coderluan
2017-07-03 18:24:33 +08:00
@xrui #26 尽信书不如无书,何况是谭浩强的书,你想说明没错给我找一个能编过去的编译器的就行。
hjc4869
2017-07-03 18:25:13 +08:00
@coderluan 既不是错的也不是过时的,VS2017 都能编译
coderluan
2017-07-03 18:25:32 +08:00
@xrui #26 你是高级黑,黑谭浩强吗?是的话原谅我没看出来。
hitmanx
2017-07-03 18:27:52 +08:00
@coderluan

#include <stdio.h>

int func(int a[5])
{
return a[0] + a[1];
}

int main()
{
int a[5];
a[0] = 3;
a[1] = 7;
printf("%d\n", func(a));

return 0;
}



$g++ 1.cpp -o 1
$./1
10
ThatIsFine
2017-07-03 18:28:38 +08:00
@liuhaotian You are right.

贴出来, 大家可以试一下
#include <stdio.h>

main(){
int a[5];
int max,i;
int fun(int a[]);// 或 int fun(int*);

printf("请输入 5 个数字:");
for(i=0;i<5;i++){
scanf("%d", &a[i]);
}

max=fun(a);
printf("%d",max);

}

int fun(int a[5]){

int max,i;

max=a[0];
for(i=1;i<5;i++){
if(a[i]>max){
max = a[i];
}
}

return max;
}
hjc4869
2017-07-03 18:31:09 +08:00
MSVC 下连这么玩都能过编译

#include <stdio.h>

int fun(void);
int fun(int);
int fun(long long);
int fun(float);
int fun(double);
int fun(void*);
int fun(anything);
int fun(struct does_not_even_exist);

int main() {
int test[5] = { 1,2,3,4,5 };
int fun(int);
printf("%d", fun(test));
return 0;
}

int fun(int a[5]) {
return a[0] + a[1] + a[2] + a[3] + a[4];
}
hitmanx
2017-07-03 18:32:44 +08:00
coderluan
2017-07-03 18:41:05 +08:00
@hjc4869 #35 VC 居然真能过,学习了,是我想当然了,gcc 没过就认为有问题了。
coderluan
2017-07-03 18:42:08 +08:00
@hitmanx #33 你把函数声明写里面,gcc 就过不去了,g++不确定。
hitmanx
2017-07-03 18:49:21 +08:00
@coderluan

写了还是可以,是我忽略了什么吗?


$ cat 1.c
#include <stdio.h>

int func(int a[5]);

int main()
{
int a[5];
a[0] = 4;
a[1] = 7;
printf("%d\n", func(a));

return 0;
}

int func(int a[5])
{
return a[0] + a[1];
}

$ gcc 1.c -o 1
$ ./1
11
$ gcc -v
...
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.1)
coderluan
2017-07-03 18:51:59 +08:00
@hitmanx #39

int main(void) {int fun(int);}
int fun(int a[5]){}

你的 fun 的声明放外面了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/372721

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX