鱼C论坛

 找回密码
 立即注册
查看: 1008|回复: 8

[已解决]几个C语言常识问题

[复制链接]
发表于 2020-11-7 12:22:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 乐瑜 于 2020-11-7 12:22 编辑

1、int main()必须写返回值return 0;吗?
2、int main()、int main(void)与void main()有什么差别?
3、主函数可以不写类型,直接用main()吗?
4、输入一组数据,以0为输入截止。这种用数组表示怎么提前定义数组长度?
最佳答案
2020-11-7 12:40:52
本帖最后由 jackz007 于 2020-11-7 12:47 编辑

    1、完全不需要,当然,写上也是可以的
    2、main() 是一个特殊的函数,特殊性体现在这个函数必须是要由操作系统来进行调用的。操作系统在调用这个函数的时候,一定会传递 2 个输入参数,int argc 和 char * argv[],前者用于指示程序名及命令行参数的数量,后者是一个字符指针数组,指向命令行中,用空格隔开的各个字符串。
         如果在 main() 函数中需要用到命令行参数,那么,就必须按 int main(int argc , char * agrv[]) 来声明 main() 函数,否则,就可以用 int main(void) 或 main(void) 或 main() 来进行声明。
    3、在 C 语言中,一个函数不声明返回值类型的话,那就是返回整型数,所以,main() 就是 int main(void)。
    4、写程序都有明确的针对对象,声明数组应该能估计出一个合理的元素数量范围,如果是这种情况,可以按一个尽可能小的数值来声明一个固定的足够使用数组空间;如果数组元素数量伸缩性难以把握,只有在程序运行中才能确定元素数量,可以采用 malloc() 和 realloc() 函数来动态分配存储空间,用完后,用 free() 进行释放即可。
         楼主的问题是定义用于存储键盘输入数据的数组,那就实在不是什么问题,比如,定义一个 1024 个元素的数组(字符、整型数都可以)它够不够用?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-7 12:34:42 | 显示全部楼层
1.应该是要写的,不写也行
2.没啥区别,建议使用 int main()
3.不行,反正 C++ 不行
4.没办法,动态分配吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-7 12:38:46 | 显示全部楼层
本帖最后由 昨非 于 2020-11-7 12:42 编辑

1、函数类型为int时,需要返回值的时候可以按需要返回int型变量,不需要时默认为return 0;
2、int main() 和 int main(void)是一样的,都是不接受参数的int型函数,都需要返回值 ,void main()是没有返回值的
3、c语言里(好像仅限于某些版本的标准)是支持main函数不写类型的,但是不太提倡
4、数组长度可以通过宏定义,例如:
#define L 10
int main()
{
        int a[L] = { 0 };
        for (int i = 0; i < L; i++)
                printf("%d\n", a[i]);
}
额,输入长度不确定时,需要动态申请内存malloc 、free语法参考
https://www.runoob.com/cprogramming/c-memory-management.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-7 12:40:52 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-11-7 12:47 编辑

    1、完全不需要,当然,写上也是可以的
    2、main() 是一个特殊的函数,特殊性体现在这个函数必须是要由操作系统来进行调用的。操作系统在调用这个函数的时候,一定会传递 2 个输入参数,int argc 和 char * argv[],前者用于指示程序名及命令行参数的数量,后者是一个字符指针数组,指向命令行中,用空格隔开的各个字符串。
         如果在 main() 函数中需要用到命令行参数,那么,就必须按 int main(int argc , char * agrv[]) 来声明 main() 函数,否则,就可以用 int main(void) 或 main(void) 或 main() 来进行声明。
    3、在 C 语言中,一个函数不声明返回值类型的话,那就是返回整型数,所以,main() 就是 int main(void)。
    4、写程序都有明确的针对对象,声明数组应该能估计出一个合理的元素数量范围,如果是这种情况,可以按一个尽可能小的数值来声明一个固定的足够使用数组空间;如果数组元素数量伸缩性难以把握,只有在程序运行中才能确定元素数量,可以采用 malloc() 和 realloc() 函数来动态分配存储空间,用完后,用 free() 进行释放即可。
         楼主的问题是定义用于存储键盘输入数据的数组,那就实在不是什么问题,比如,定义一个 1024 个元素的数组(字符、整型数都可以)它够不够用?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-7 12:48:35 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-11-7 12:34
1.应该是要写的,不写也行
2.没啥区别,建议使用 int main()
3.不行,反正 C++ 不行

非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-7 12:49:08 | 显示全部楼层
jackz007 发表于 2020-11-7 12:40
1、完全不需要,当然,写上也是可以的
    2、main() 是一个特殊的函数,特殊性体现在这个函数必须是 ...

非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-7 12:49:41 | 显示全部楼层
jackz007 发表于 2020-11-7 12:40
1、完全不需要,当然,写上也是可以的
    2、main() 是一个特殊的函数,特殊性体现在这个函数必须是 ...

非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-7 13:05:20 | 显示全部楼层
有的问题,用程序运行一下就知道了,不需改什么东西的时候,动一下手,立马见分晓
1:必须返回。不过编译器对于这个main()函数,是会自动给你加上的,所以你才会不写也行。其它函数就不会自动给你加了,所以你不写不行
2:类型在函数名前,表示,这个函数运行完后要返回这个类型,即,带返回值的所以int main(),返回一个整型值;
函数名后面的括号,是指这个函数可以传进去的参数类型,也就是这个函数会拿这个括号里面的东西来用
int main(void),是指传进去一个void类型的参数
void main()是指函数运行完后,它会带一个void类型的值回来,int main()则会带一个int类型的值。void为空,所以void main()不必返回。

3:这个可不可以完全可以自己动手试一下,别人不一定有你这种实验的好奇想法,因此,别人不一定知道,因为他没有试过

4:以0为截止的是字符串。C里面没有字符串类型,C++有。但是这个0并不是你输入的。如果你想要自己设计一个,输入是0就结束,而0不算字符的话,可以利用循环来接收。
但是数组必须先定义长度,要想不定义长度,得动态申请内存。C用的是malloc之类的函数,c++用的new类。c++简单,可以直接new:
char a[n]=new char[];
如果你要提前定义的话,因为不知道输入最终是多长,所以只能估算,定个20,100,1000,随你。
你可以循环来getchar(),每得到一个,就放进char a[n]里,然后n++。中间还要判断一下是不是'0',是就结束循环

你也可以多建几个小数组,暂存输入的字符,遇到0结束后,再把它们合并或者移进一个新创建的数组里面。,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-7 13:25:41 | 显示全部楼层
405794672 发表于 2020-11-7 13:05
有的问题,用程序运行一下就知道了,不需改什么东西的时候,动一下手,立马见分晓
1:必须返回。不过编译 ...

嗯嗯,非常感谢!!!
这几个问题都是在做题过程中产生的疑问,关于主函数那一部分,最开始我一直用void main(),但是试卷上的一些题会用到int main(),或者直接用main()。而我用vc6.0编译,也看不出差异来。所以会产生用哪个都可以的感觉,但是写题的时候又会疑惑
数组这里我也一直提前定义长度,但是总感觉这样跟题意有差别,看到你的回答,我觉得用getchar()这种方法挺好的,简单实用。
再次感谢您的回答,给我理清思路带来了很大的帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 17:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表