#include <stdio.h>
int main(void)
{
int dogs;
printf("How many dogs do you have?\n");
scanf("%d", &dogs);
printf("So you have %d dog(s)!\n", dogs);
return 0;
}
#include是使用头文件的意思,所有的函数都有原型。但printf(),scanf()等函数不申明函数原型,其原因正是因为<stdio.h>中已经包含了它们的函数原型。出现在文件顶部的信息成为头,C一般有很多头文件。
int main(void)
C语言中,任何一个程序都是从main函数开始的,可以理解为它是程序的“基石”它为程序的运行提供了一个基本条件。
圆括号()代表main是一个函数。就像数组中,ar[]中的[]代表ar是一个数组。
int 指明了函数返回值的类型,一个函数,有时被调用函数调用时需要使用其返回值,其类型就代表了它的返回值类型。当然,函数也可以使用void,代表它不返回值。
(void)代表了其没有参数
/* lethead2.c */
#include <stdio.h>
#include <string.h> /* for strlen() */
#define SPACE ' '
void show_n_char(char ch, int num);
int main(void)
{
show_n_char(SPACE, 12); /* using constants as arguments */
printf("%s\n", NAME);
return 0;
}
/* show_n_char() definition */
void show_n_char(char ch, int num)
{
int count;
for (count = 1; count <= num; count++)
putchar(ch);
}
如上,程序最底层为函数的定义,前面说过,函数有原型,这个自我定义的函数原型即为main()之前的内容。而在函数中,调用它并赋予这个新定义的函数实际参量,类似于
char ch = SPACE;
int num = 12;
注意,在被调用的函数中对数值的操作并不会对调用函数中的值产生影响(除非使用指针)。就好像调用函数是一个”箱子“,被调用函数是另一个“箱子”,你从调用函数这个”箱子“中copy了一点东西出来放到被调用函数这个"箱子"中(此处是"SPACE""num"),两者已经没有关系了,各玩各的。
/* lesser.c -- finds the lesser of two evils */
#include <stdio.h>
int imin(int, int);
int main(void)
{
int evil1, evil2;
printf("Enter a pair of integers (q to quit):\n");
while (scanf("%d %d", &evil1, &evil2) == 2)
{
printf("The lesser of %d and %d is %d.\n",
evil1, evil2, imin(evil1,evil2));
printf("Enter a pair of integers (q to quit):\n");
}
return 0;
}
int imin(int n,int m)
{
int min;
if (n < m)
min = n;
else
min = m;
return min;
}
前面说了,函数可以返回值,函数名前面的数据类型表示函数返回的值的类型。
return min;
return就是将函数的值返回给调用函数,理解为在被调用函数中的一种加工,然后成品"min"给main()使用(此处为在while中打印出来),返回值就和其他值一样的使用方法,可以赋给其他变量,打印等等。
注意噢。return的作用是将终止当前函数,将控制返回给调用函数并执行调用函数的下一个语句
再次提醒,调用与被调用函数中的动作对对方而言是"封闭"的,两者中使用同一个变量名并不是错误的,同理,它们自己内部发生的事情另一方并不会知晓,所以需要使用return返回值而不是将min直接在调用函数中使用。(想象调用函数与被调用函数如古罗马(被调用函数imin())和中国古代(调用函数main())一样,两者使用对方的物品,但需要通过商人(return)才能中间进行交换(min))。