学点C语言(32):函数

C语言的函数可以返回数组以外(不包括数组指针)的任何类型.

不写明返回类型, 在以前的 C 语言版本中是默认返回 int, 现在 C99、C++ 已不支持.

void 表示没有返回值, 也就无须 return 语句; 如果是其他语句必须有 return 语句.

在 main 函数中(只是 main 函数)若忘掉 return, 有些编译器会自动添加 return 0;

1. 每执行 return 语句函数将会退出:

#include <stdio.h>

int main(void)
{
  printf("111\n");
  printf("222\n");

  return 0; /* 之后的语句将不会执行 */

  printf("333\n");
  printf("444\n");

  getchar();
  return 0;
}

2. 如果函数没有返回值, 可以借无参数的 return 跳出:

#include <stdio.h>

void prn(void);

int main(void)
{
  prn();
  getchar();
  return 0;
}

void prn(void) {
  printf("111\n");
  printf("222\n");

  return; /* 无参数的 return */

  printf("333\n");
  printf("444\n");
}

3. return 后面不是"等号", 但返回值也可以写在括号中:

#include <stdio.h>

long long MySqr(int x);

int main(void)
{
  int i = 9;

  i = MySqr(i);
  printf("%d\n", i);

  getchar();
  return 0;
}

long long MySqr(int x) {
  return(x*x); /* 返回值在括号中 */
}

时间: 2024-09-01 18:20:26

学点C语言(32):函数的相关文章

学点C语言(39):函数

C语言离不开函数, 使用函数也很方便, 但使用函数是有代价的; 特别是在反复调用时, 函数会因反复地压栈.出栈而浪费一些时间. 下面是测试, 用函数与不用函数的时间分别是: 8秒.4秒! 1. 测试使用函数的代价: #include <stdio.h> #include <time.h> int sum(int x) { return x + x; } int main(void) { int count = 1000000000; int i; int num; time_t s

学点C语言(38):函数

先复习函数的定义与函数的声明: //这是一个求和函数的定义: int add(int x, int y) { return(x + y); } //可以这样声明: int add(int x, int y); //也可以这样声明: int add(int, int); 定义一个函数指针声明一个函数差不多, 用 (* ) 包括函数即可: //像这样: int (*pfun)(int, int); //或这样: int (*pfun)(int x, int y); //也可以: typedef in

学点C语言(33):函数

1. 传值参数(非指针参数): #include <stdio.h> int inc(int x); int main(void) { int num = 1; printf("%d\n",inc(num)); /* 2 */ printf("%d\n",num); /* 1; num 并没有改变,用作函数参数时只是复制过去 */ getchar(); return 0; } int inc(int x) { x++; return x; } 2. 传址

学点C语言(41):函数

main函数是C程序的入口点,不可或缺,不可重复; main函数应返回一个整数值给操作系统,返回0表示正常结束. 前面使用的main函数都是无参数的: int main(void); main 可以有两个参数: int main(int argc,char *argv[]); 第一个是自动获取的参数数目(+1),第二个是参数列表(字符串列表); 这一般用于控制台或 dos 下, 在 Windows 下我们双击文件名打开文件时,该文件名(包括路径)也是通过这些参数传递的. 1. 获取 main函数

学点C语言(40):函数

像 printf 这种多参函数,是借用 stdarg.h 中的宏实现的. va_list : 用于定义遍历参数列表的指针; va_start : 让指针指向第一个参数; va_arg : 获取下一个参数,并向后移动一个位置; va_end : 释放指针,完成遍历. 1. 整数求和: 本例实现了对系列整数求和,要求至少要有三个参数,并且最后一个必须是 0. 最后的 0 用于识别列表结束. #include <stdio.h> #include <stdarg.h> int sum(i

学点C语言(36):函数

数组参数属于指针参数. 指针参数即时传址参数(或叫引用参数), 如果想在函数中修改参数的值, 这是唯一的途径. 如果把数组当作参数, 不管你愿意与否, 它就是指针, 指向第一个值的指针. 1. 数组参数就是指向第一个元素的指针: #include <stdio.h> void getArr(int p[], int si); int main(void) { int ns[] = {1,2,3,4,5}; getArr(ns, sizeof(ns)/sizeof(ns[0])); getcha

学点C语言(35):函数

1. 递归就是: 函数自己调用自己 这是一个最简单的递归, 不过它会一直执行, 可用Ctrl+C 终止. #include <stdio.h> void prn(void) { printf("C++Builder 2009\n"); prn(); /* 自调用;注意它会一直执行,可用Ctrl+C终止执行 */ } int main(void) { prn(); getchar(); return 0; } 2. 使用递归一定要有跳出的条件: #include <st

学点C语言(34):函数

1. 局部变量: 局部变量也叫自动变量,它声明在函数开始,生存于栈,它的生命随着函数返回而结束. #include <stdio.h> int main(void) { auto int i = 9; /* 声明局部变量的关键字是auto;因可以省略,几乎没人使用 */ printf("%d\n",i); getchar(); return 0; } 2. 全局变量: 全局变量声明在函数体外,一般应在函数前; 每个函数都可以使用它,不过全局变量应尽量少用. #include

学点C语言(31):函数

1. 如果函数没有声明, 应该在调用前定义: #include <stdio.h> /* 定义求大值函数 */ int MAX(int x, int y) { if (x > y) return x; else return y; } /* 定义求小值函数 */ int MIN(int x, int y) { return x < y ? x : y; } int main(void) { int a = 5; int b = 6; /* 调用函数 */ printf("