main()
{ int x=7,y=8,*max;
max = fun(&x,&y); 由于fun(&x,&y)的运算结果是地址,所以用max来接收。
printf(“%d”, *max);
} 8)考试重要的话语:
指针变量是存放地址的。并且指向哪个就等价哪个,所有出现*p的地方都可以用它等价的代替。例如:int a=2,*p=&a; *p=*p+2;
(由于*p指向变量a,所以指向哪个就等价哪个,这里*p等价于a,可以相当于是a=a+2)
25. 数组: 存放的类型是一致的。多个数组元素的地址是连续的。 1)一维数组的初始化: int a[5]={1,2,3,4,5}; 合法 int a[5]={1,2,3, }; 合法 int a[]={1,2,3,4,5}; 合法,
int a[5]={1,2,3,4,5,6}; 不合法,赋值的个数多于数组的个数了 2)一维数组的定义;
int a[5];注意这个地方有一个重要考点,定义时数组的个数不是变量一定是常量。
int a[5] ; 合法,最正常的数组
int a[1+1] ; 合法,个数是常量2,是个算术表达式 int a[1/2+4] ; 合法,同样是算术表达式
int x=5,int a[x] ; 不合法,因为个数是x,是个变量,非法的, #define N 5
int a[N] ; 合法,define 后的的N是符号常量,只是长得像变量
3)二维数组的初始化
int a[2][3]={1,2,3,4,5,6}; 合法,很标准的二维的赋值。 int a[2][3]={1,2,3,4,5 }; 合法,后面一个默认为0。 int a[2][3]={{1,2,3} ,{4,5,6}}; 合法,每行三个。
int a[2][3]={{1,2},{3,4,5}}; 合法,第一行最后一个默认为0。 int a[2][3]={1,2,3,4,5,6,7}; 不合法,赋值的个数多余数组的个数了。
int a[][3]={1,2,3,4,5,6}; 不合法,不可以缺省行的个数。 int a[2][]={1,2,3,4,5,6}; 合法,可以缺省列的个数。 补充:
1)一维数组的重要概念: 对a[10]这个数组的讨论。
a) a表示数组名,是第一个元素的地址,也就是元素a[0]的地址。(等价于&a) b) a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。 c) a是一维数组名,所以它是列指针,也就是说a+1是跳一列。 对a[3][3]的讨论。
a) a表示数组名,是第一个元素的地址,也就是元素a[0][0]的地址。
b) a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。 c) a是二维数组名,所以它是行指针,也就是说a+1是跳一行。
d) a[0]、a[1]、a[2]也都是地址常量,不可以对它进行赋值操作,同时它们都
是列指针,a[0]+1,a[1]+1,a[2]+1都是跳一列。 26. 其他知识点:
1)字符串的 strlen() 和 strcat() 和strcmp() 和strcpy()的使用方法一定要记住。他们的参数都是地址。其中strcpy() 和strcmp()有两个参数。
2)strlen 和 sizeof的区别也是考试的重点;
3)#define f(x)(x)*(x) 和 #define f(x) x*x 之间的差别。一定要好好的注意这写容易错的地方,替换的时候有括号和没有括号是很大的区别。 4)int *p;
p = (int *)malloc(4);
p = (int *)malloc(sizeof(int));以上两个等价 当心填空题目,malloc的返回类型是 void *
6)函数的递归调用一定要记得有结束的条件,并且要会算简单的递归题目。 7)结构体要掌握最简单的,而且一定要知道如何引用结构体中的各个变量。 8)scanf 和 gets的数据:
如果输入的是 good good study!
那么scanf(“%s”,a); 只会接收 good. 考点:不可以接收空格。 gets(a); 会接收 good good study! 考点:可以接收空格。 9)“文件包含”的考查点:
no1.c no2.c
这里一个C语言程序是有两个文件组成,分别是no1.c, no2.c。那么no1.c中最开始有个#include”no2.c”,表示把第二个文件的内容给包含过来,那么no1.c中调用add()函数的时候就可以了把数值传到no2.c中的被调用函数add()了。
一个文件必须要有main函数。 这句话错了。 例如:no2.c就没有。 被包含的文件一定是以.h结束的。 这句话错了。例如:no1.c中就是#include”no2.c”以.c结尾的。 10)指针迷惑的考点:
char ch[]=”iamhandsome”; char *p=ch; 问你 *(p+2) 和 *p+2的结果是多少? ‘m’ ‘k’ 结果是这两个。 11)数组中放数组一定要看懂: int a[8]={1,2,3,4,4,3,2,2}; int b[5]={0};
b[a[3]]++ 这个写法要看懂,结果要知道是什么?b[4]++,本身是0,运行完后,b[4]为1了。
#include”no2.c” main() { add(29 , 33); ……. } } int add(int a,int b) { return a+b;