C语言中函数可以返回哪些类型的数据?(求详解)

作者&投稿:赞素 (若有异议请与网页底部的电邮联系)
C语言数据类型各自特点,求详解!~

在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。
1.基本数据类型 基本数据类型最主要的特点是,其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明的。
对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,其值不发生改变的量称为常量,取值可变的量称为变量。它们可与数据类型结合起来分类。例如,可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。在程序中,常量是可以不经说明而直接引用的,而变量则必须先说明后使用。
在C语言中,字符常量有以下特点:
1.字符常量只能用单引号括起来,不能用双引号或其它括号。
2.字符常量只能是单个字符,不能是字符串。
3.字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如'5'和5 是不同的。'5'是字符常量,不能参与运算。
实型变量 实型变量分为两类:单精度型和双精度型.
其类型说明符为float 单精度说明符,double 双精度说明符。在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。实型变量说明的格式和书写规则与整型相同。
例如: float x,y; (x,y为单精度实型量)    
double a,b,c; (a,b,c为双精度实型量) 实型常数不分单、双精度,都按双精度double型处理。
字符型量 字符型量包括字符常量和字符变量。

答案为B
无论你返回什么类型 主调中赋值为什么类型
在你不定义返回类型时 C/C++编译器都会默认为int
测试程序如下
#include test(){float a = 1;return a;}int main(){double k = test();printf("k = %lf
", k);printf("return : %%d=%d %%f:%f
", test(), test());}打印结果为
k = 1.000000
return : %d=1 %f:-0.000000

过程分析
函数test的默认返回值int 所以在返回float型时 实际上做了一个强制转换 即return (int) a;
所以test 的实际返回值为int型 这一点从
printf("return : %%d=%d %%f:%f
", test(), test());打印上可以看出来
按照%d打印结果正确 按照%f打印错误
而double k = test();实际上是把int型再次做了一次强制转换 即等同于
double k = (double)test();
所以 应该是B才对

很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C.( void main( ) 从来就不存在于 C++ 或者 C )。下面我分别说一下 C 和 C++ 标准中对 main 函数的定义。

1. C

在 C89 中,main( ) 是可以接受的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C programming Language 2e(《C 程序设计语言第二版》)用的就是 main( )。不过在最新的 C99 标准中,只有以下两种定义方式是正确的:

int main( void )

int main( int argc, char *argv[] )

(参考资料:ISO/IEC 9899:1999 (E) Programming languages — C 5.1.2.2.1 Program startup)

当然,我们也可以做一点小小的改动。例如:char *argv[] 可以写成 char **argv;argv 和 argc 可以改成别的变量名(如 intval 和 charval),不过一定要符合变量的命名规则。

如果不需要从命令行中获取参数,请用int main(void) ;否则请用int main( int argc, char *argv[] ) 。

main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统)。

如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入return 0; ,表示程序正常退出。不过,我还是建议你最好在main函数的最后加上return 语句,虽然没有这个必要,但这是一个好的习惯。注意,vc6不会在目标文件中加入return 0; ,大概是因为 vc6 是 98 年的产品,所以才不支持这个特性。现在明白我为什么建议你最好加上 return 语句了吧!不过,gcc3.2(Linux 下的 C 编译器)会在生成的目标文件中加入 return 0; 。

2. C++

C++98 中定义了如下两种 main 函数的定义方式:

int main( )

int main( int argc, char *argv[] )

(参考资料:ISO/IEC 14882(1998-9-01)Programming languages — C++ 3.6 Start and termination)

int main( ) 等同于 C99 中的 int main( void ) ;int main( int argc, char *argv[] ) 的用法也和 C99 中定义的一样。同样,main 函数的返回值类型也必须是int。如果main函数的末尾没写return语句,C++98 规定编译器要自动在生成的目标文件中加入 return 0; 。同样,vc6 也不支持这个特性,但是 g++3.2(Linux 下的 C++ 编译器)支持。

3. 关于 void main

在 C 和 C++ 中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回值时可以把main函数定义成void main(void) 。然而这是错误的!main 函数的返回值应该定义为 int 类型,C 和 C++ 标准中都是这样规定的。虽然在一些编译器中,void main 可以通过编译(如 vc6),但并非所有编译器都支持 void main ,因为标准中从来没有定义过 void main 。g++3.2 中如果 main 函数的返回值不是 int 类型,就根本通不过编译。而 gcc3.2 则会发出警告。所以,如果你想你的程序拥有很好的可移植性,请一定要用 int main 。

4. 返回值的作用

main 函数的返回值用于说明程序的退出状态。如果返回 0,则代表程序正常退出,否则代表程序异常退出。下面我们在 winxp 环境下做一个小实验。首先编译下面的程序:

int main( void )

{

return 0;

}

然后打开附件里的“命令提示符”,在命令行里运行刚才编译好的可执行文件,然后输入“echo %ERRORLEVEL%”,回车,就可以看到程序的返回值为 0 。假设刚才编译好的文件是 a.exe ,如果输入“a && dir”,则会列出当前目录下的文件夹和文件。但是如果改成“return -1”,或者别的非 0 值,重新编译后输入“a && dir”,则 dir 不会执行。因为 && 的含义是:如果 && 前面的程序正常退出,则继续执行 && 后面的程序,否则不执行。也就是说,利用程序的返回值,我们可以控制要不要执行下一个程序。这就是 int main 的好处。如果你有兴趣,也可以把 main 函数的返回值类型改成非 int 类型(如 float),重新编译后执行“a && dir”,看看会出现什么情况,想想为什么会出现那样的情况。顺便提一下,如果输入 a || dir 的话,则表示如果 a 异常退出,则执行 dir 。

5. 那么 int main( int argc, char *argv[], char *envp[] ) 呢?

这当然也不是标准 C 里面定义的东西!char *envp[] 是某些编译器提供的扩展功能,用于获取系统的环境变量。因为不是标准,所以并非所有编译器都支持,故而移植性差,不推荐使用。

void
int/unsigned int
short/unsigned short
char /unsigned char
float
double
struct type
void *
int */unsigned int*
short */unsigned short*
char */unsigned char*
float *
double *
struct type *
c99定义了bool型,即返回TRUE/FALSE
另外可以typedef任意一种类型。也就是说,你自己可以进行类型定义,可以返回任意的类型及其指针类型;

void
int
short
char
float
double
struct type
void *
int *
short *
char *
float *
double *
struct type *


c语言中调用函数如何返回多个值?
2、通过使用指针返回结果为:3、通过使用结构:因为结构是用户定义的数据类型;可以定义一个包含两个整数变量的结构,并将更大和更小的值存储到这些变量中,然后使用该结构的值。4、通过使用结构返回结果为:5、通过使用数组,当一个数组作为参数传递时,基地址将传递给该函数,因此无论对数组副本所做的...

c语言中函数返回值可以是数组、字符串和结构体吗?
\/\/语法编码规则的角度看 ANSI C语言标准,明确规定 数组类型和函数类型不可以做为返回值。解决这种返回值的方法是通过指针来间接返回,即使用数组指针和函数指针。这可以做为c语言引入指针的另一个理由。结构体类型可以做为返回值,我猜测C语言设计者当时引入struct结构体的概念,目的是为了增加一种建立C...

C语言中main()函数是否返回值?
考虑到main函数的特殊性,lz不明白这个问题可以理解。main()是省略了返回值类型,C语言会默认认为成main的类型为int,在main()的函数体内要返回一个值,如return 0;而void main()的返回值是void类型,也就是说没有返回值。这样在main()的函数体内你就不用写return 0;或者return 1;之类的返回语句...

c语言如何定义一个函数可以返回多个值回去给主函数呀。
函数的返回值顶多是一个数,通过函数直接返回的这个数只有在是指针时才能给出多个数据结果。可以考虑以下几个方法:返回指针:int* display() { int *p; p=malloc(sizeof(int)*6); ... return p; } \/\/用p[0]~p[5]计算各位 void main() { int *p; p=display(); ... free(p); }...

C语言中定义函数时,函数返回值类型是什么,关键字可以省略?
在 C 语言中,当定义函数时,函数返回值类型可以指定为任何一种数据类型,例如 int、float、double、char、void 等。关键字可以省略的情况是指函数返回值类型为 void 时,可以省略关键字。以下是一个简单的 C 语言函数示例:include <stdio.h> int add(int a, int b) { return a + b;} int ...

c语言中,对于函数和参数来说,函数的返回值可有可无,这句话对吗?_百度...
错的。函数必须要有返回值,即使不调用

C语言中,函数可以没有返回值吗?
那么函数的默认类型是int类型的,也就是说函数必须返回一个int型的返回值。C语言函数是一种函数,用来编译C语言,一般包括字符库函数,数学函数,目录函数,进程函数,诊断函数,操作函数等。函数是理解面向过程和面向对象的切入点。通过 C 语言的函数可以直观地辨别出面向过程和面向对象的区别。

C语言中函数的返回值可不可以是数组,如果可以应该怎么设置参数?请高 ...
可以的,用指针做返回值 int * array(int *a){ for(i=0;i<10;i++){ a[i]++;} return a;} main(){ int *p,i;int a[10]={1,2,3,4,5,6,7,8,9,0};p=array();for(i=0;i<10;i++){ printf("%d ",p[i]);} } 运行后数组各值加1 ...

c语言中函数里是不是遇到return语句就不再执行函数剩下的内容直接返回了...
是的。例如:fun1(){ return;printf("fun1");} fun2(){ fun1();printf("fun2");} main(){ fun2();}

C语言中函数返回什么类型的变量哪些可以是临时,哪些必须是静态或全局...
静态变量可以在函数内定义,但是共用的,可以被更改和调用,程序不死则一直存在 全局变量与静态变量类似,但是要定义在所有函数以外,需要小心被多线程更改 我语言有点杂乱,看一下摘抄吧 静态局部变量属于静态存储方式,它具有以下特点:(1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在...

纳溪区15996728885: c语言的函数返回值? -
隐符卡培: 所谓返回值,就是人们想要知道函数或者程序所得到 的结果而设计的函数或者程序结束时给出一个值.比如:我们编写一个加法函数,肯定想知道加完过后的结果是什么,那么我们就指定这个结果为该加法程序的返回值.关于返回值的返回: 1、函数调用语句本身代表其返回值:例如:fun(a);那么“fun(a)”就是这个返回值. 2、可以把返回值存到对应类型的变量之中.例如:int a=fun(b); 3、返回值是多种多样的,可以是各种各样的,int short char double 等等,还可以是指针或者结构体.在数据结构的二叉树部分,某一个函数的返回值是一个带有两个指针的结构体.

纳溪区15996728885: 在C语言中,函数的数据类型是指 - ---.A. 函数返回值的数据类型 B. 函数形参的数据 -
隐符卡培: 选A.例如: double function(argue_type argue_name /*形参*/) {double result = 0.0;return result; /*返回的变量必须是double类型的*/ }void function() {... /*具体执行代码*/return; /*void是空类型,所以返回时不带具体类型.*//*通常void类型...

纳溪区15996728885: 在C语言中,函数返回的数据类型取决于 -
隐符卡培: 答案是C啦, 例如 int fun(){} int就是函数的返回类型, return 后面带的返回值也是由这个来决定的!

纳溪区15996728885: 决定C语言中函数返回值类型的是【 】 -
隐符卡培: 决定C语言中函数返回值类型的是定义函数时在函数首部所指定的类型. 在C语言中,一个标准的函数定义语句块必须包含函数返回值的类型标识符、函数名、形参类型及数量、函数体、返回值表达式.如果函数返回值类型为 void (即无返回值...

纳溪区15996728885: 在C语言中,函数返回的数据类型取决于 -
隐符卡培:[选项] A. 函数名字 B. return语句中表达式的数据类型 C. 在定义函数时所指定的数据类型D. 主调函数的数据类型

纳溪区15996728885: c++中,函数的返回类型可以是除了数组和什么的任何类型 -
隐符卡培: 【正确答案】 函数【原话】 C++中,函数返回类型可以是C++中除【函数、数组】类型之外的任何一个合法的数据类型,包括普通类型、指针类型和引用类型等.【说明】 C++中,函数定义的一般形式如下: 返回类型 函数名(参数表列) ...

纳溪区15996728885: c语言中函数返回值类型 -
隐符卡培: folat型.然后,返回类型你想写啥写.只要是基本数据类型都是能互相转换的.但这个函数返回的变量是个float所以由此判断.

纳溪区15996728885: c语言 请问我这个调用函数的返回类型是什么? -
隐符卡培: 没有返回类型,函数不一定非要返回一个值

纳溪区15996728885: C语言的函数形式参数和函数的返回值 -
隐符卡培: 因为自定义函数在main函数的后面,所以第一行先声明使用了一个名为hello的函数,函数在主函数的后面.再看主函数,赋值应该会吧,把j=5的值通过hello函数赋给变量i,进行运算i=9.再返回主函数,将9赋给K,然后输出k,值为9.

纳溪区15996728885: c语言中,函数返回值的类型缺省时,表示该函数返回值的类型是什么 -
隐符卡培: c语言中,函数返回值的类型缺省时,表示该函数返回值的类型是int型

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网