C语言期末考试全部知识点复习资料--重点--常考点 下载本文

6)如何求阶层:n! 背诵这个程序! int fun(int n)

{ int p=1;

for(i=1;i<=n;i++) p=p*i; return p; }

7)函数的参数可以是常量,变量,表达式,甚至是函数调用。 int add(int x,int y){return x+y;} main() { int sum;

sum=add(add(7,8),9); 请问sum的结果是多少? 结果为24 }

8)一定要注意参数之间的传递

实参和形参之间 传数值,和传地址的差别。(考试的重点) 传数值的话,形参的变化不会改变实参的变化。 传地址的话,形参的变化就会有可能改变实参的变化。 9)函数声明的考查:

一定要有:函数名,函数的返回类型,函数的参数类型。不一定要有:形参的名称。

int fun(int a[] , int b[]) {

………….. }

已经知道函数是这样。这个函数的正确的函数声明怎么写?

int fun(int *a , int *b); 这里是函数声明的写法,注意数组就是指针

int fun(int a[] , int b[]); 这种写法也是正确的 int fun(int b[] , int c[]); 这种写法也是正确的,参数的名称可以随便写

int fun(int * , int *); 这种写法也是正确的,参数的名称可以不写

10)要求掌握的库函数:

a)库函数是已经写好了函数,放在仓库中,我们只需要如何去使用就可以了!

b)以下这些库函数经常考到,所以要背诵下来:abs()、 sqrt()、fabs()、pow()、

strcmp()、strcpy()、strlen()。

24.指针:指针变量的本质是用来放地址,而一般的变量是放数值的。 1)定义:int *p; 后,表达式中 *p和p的差别:简单说*p是数值,p是地址!

*p可以当做变量来用;*的作用是取后面地址p里面的数值

p是当作地址来使用。可以用在scanf函数中:scanf(“%d”,p); 2) *p++ 和 (*p)++的之间的差别:改错题目中很重要!考试超级重点 *p++是 地址会变化。 口诀:取当前值,然后再移动地址! (*p)++ 是数值会要变化。 口诀:取当前值,然后再使数值增加1。

例题:int *p,a[]={1,3,5,7,9}; p=a;

请问*p++和(*p)++的数值分别为多少?

*p++: 这个本身的数值为1。由于是地址会增加一,所以指针指向数值3了。

(*p)++ 这个本身的数值为1。由于有个++表示数值会增加,指针不移动,但数值1由于自加了一次变成了2。 3)三名主义:(考试的重点)

数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量名。(考了很多次)

函数名:表示该函数的入口地址。 字符串常量名:表示第一个字符的地址。 4)移动指针(经常加入到考试中其他题目综合考试) char *s=“meikanshu”

while(*s){printf(“%c”,*s);s++;}

这个s首先会指向第一个字母m然后通过循环会一次打印出一个字符,s++是地址移动,打印了一个字母后,就会移动到下一个字母! 5)指针变量两种初始化(一定要看懂) 方法一:int a=2,*p=&a;(定义的同时初始化) 方法二:int a=2,*p; (定义之后初始化) p=&a;

6)传数值和传地址(每年必考好多题目)

void fun(int a,int b) void fun(int *a,int *b)

{ int t ; { int t ;

t=a;a=b;b=t; t=*a;*a=*b;*b=t; } } main() main() { int x=1,y=3, { int x=1,y=3, fun(x,y); fun(&x,&y) printf(“%d,%d”,x,y); printf(“%d,%d”,x,y);

} }

这个题目答案是1和3。 这个题目的答案就是3和1。 传数值,fun是用变量接受,所以fun中 传地址,fun用指针接受!这个时候fun

的交换不会影响到main中的x和y 。 中的交换,就会影响到main中的x和y。

传数值,形参的变化不会影响实参。 传地址形参的变化绝大多数会影响到实参!

7)函数返回值是地址,一定注意这个*号

int *fun(int *a,int *b) 可以发现函数前面有个*,这个就说明函数运算结果是地址

{ if(*a>*b)return a; return a 可以知道返回的是a地址。

else return b; }