小甲鱼 P29 参数和指针
一个函数仅实现一个功能
类型名 函数名(参数列表)
{
函数体
}
形参和实参
形参:形式参数
实参:实际参数
传值和传址(指针)
#include <stdio.h>
void swap(int *x, int *y);
void swap(int *x, int *y)
{
int temp;
printf("In swap, 互换前:x = %d, y = %d\n", *x, *y);
temp = *x;
*x = *y;
*y = temp;
printf("In swap, 互换后:x = %d, y = %d\n", *x, *y);
}
int main()
{
int x = 3, y = 5;
printf("In main, 互换前:x = %d, y = %d\n", x, y);
swap(&x, &y);
printf("In main, 互换后:x = %d, y = %d\n", x, y);
return 0;
}
传数组
#include <stdio.h>
void get_array(int a[10]);
void get_array(int a[10])
{
int i;
a[5] = 520;
for (i = 0; i < 10; i++)
{
printf("a[%d] = %d\n", i, a[i]);
}
}
int main()
{
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int i;
get_array(a);
printf("在main函数里边再打印一次....\n");
for (i = 0; i < 10; i++)
{
printf("a[%d] = %d\n", i, a[i]);
}
return 0;
}
传递的是数组第一个元素的地址
#include <stdio.h>
void get_array(int b[10]);
void get_array(int b[10])
{
printf("sizeof b: %d\n", sizeof(b));
}
int main()
{
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
printf("sizeof a :%d\n", sizeof(a));
get_array(a);
return 0;
}
可变参数
#include <stdarg.h>
va_list
va_start
va_arg
va_end
stdarg.h数据类型
类型名称 | 描述 | 相容 |
va_list | 用来保存宏va_arg与宏va_end所需信息 | C89 |
stdarg.h宏
巨集名称 | 描述 | 相容 |
va_start | 使va_list指向起始的参数 | C89 |
va_arg | 检索参数 | C89 |
va_end | 释放va_list | C89 |
va_copy | 拷贝va_list的内容 | C99 |
#include <stdio.h>
#include <stdarg.h>
//可变参数
//n,指定后面有多少个参数。...占位符,参数个数不确定
int sum(int n, ...);
int sum(int n, ...)
{
int i, sum = 0;
//va_list:定义字符指针类型
va_list vap;//可变参数类型,定义参数列表
va_start(vap, n);//使vap指向起始参数
for(i = 0; i < n; i++)
{
sum += va_arg(vap, int);//获取每一个参数的值
}
va_end(vap);//关闭参数列表,收尾工作
return sum;
}
int main()
{
int result;
result = sum(3, 1, 2, 3);
printf("result = %d\n", result);
return 0;
}