C语言进阶课程学习记录-函数参数的秘密
- 实验
- 实验
- 小结
- 调用约定
- 实验-求平均数
- 实验-可变参数的函数
- 小结
本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程,图片全部来源于课程PPT,仅用于个人学习记录
实验
#include int func(int i, int j) { printf("%d, %d\n", i, j); return 0; } int main() { int k = 1; func(k++, k++);//warning: operation on 'k' may be undefined [-Wsequence-point]| printf("%d\n", k); return 0; } /* 2, 1 3 */
实验
#include int main() { int k = 2; int a = 1; k = k++ + k++; printf("k = %d\n", k); if( a-- && a ) { printf("a = %d\n", a); } return 0; } /* k = 6 */
小结
函数的参数在栈上分配空间
函数的实参并没有固定的计算次序
调用约定
实验-求平均数
#include float average(int array[], int size) { int i = 0; float avr = 0; for(i=0; i avr += array[i]; } return avr / size; } int main() { int array[] = {1, 2, 3, 4, 5}; printf("%f\n", average(array, 5)); return 0; } /* 3.000000 */ va_list args; int i = 0; float sum = 0; va_start(args, n); for(i=0; i sum += va_arg(args, int); } va_end(args); return sum / n; } int main() { printf("%f\n", average(5, 1, 2, 3, 4, 5)); printf("%f\n", average(4, 1, 2, 3, 4)); return 0; } /* 3.000000 2.500000 */