学点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]));

  getchar();
  return 0;
}

void getArr(int p[], int si) {
  int i;
  for (i = 0; i < si; i++) {
    printf("%d\n", p[i]);
  }
}

2. 干脆直接声明为指针:

#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]));

  getchar();
  return 0;
}

void getArr(int *p, int si) {
  int i;
  for (i = 0; i < si; i++) {
    printf("%d\n", p[i]);
  }
}

3. 即使你在形参中指定维数也不起作用:

#include <stdio.h>

void getArr(int p[2], int si);

int main(void)
{
  int ns[] = {1,2,3,4,5};

  getArr(ns, sizeof(ns)/sizeof(ns[0]));

  getchar();
  return 0;
}

void getArr(int p[2], int si) {
  int i;
  for (i = 0; i < si; i++) {
    printf("%d\n", p[i]);
  }
}

时间: 2024-11-01 04:25:42

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

学点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语言(32):函数

C语言的函数可以返回数组以外(不包括数组指针)的任何类型. 不写明返回类型, 在以前的 C 语言版本中是默认返回 int, 现在 C99.C++ 已不支持. void 表示没有返回值, 也就无须 return 语句; 如果是其他语句必须有 return 语句. 在 main 函数中(只是 main 函数)若忘掉 return, 有些编译器会自动添加 return 0; 1. 每执行 return 语句函数将会退出: #include <stdio.h> int main(void) { pri

学点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语言(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("