对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)“文件包含”的考查点: no2.c
#include”no2.c” main() { add(29 , 33); ??. } } int add(int a,int b) { return a+b; no1.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了。 15)字符串的赋值: C语言中没有字符串变量,所以用数组和指针存放字符串: a)char 对 b)char 对 c)char
ch[10]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,‘\\0’}; 对 d)char 对 e)char 对
错了!数组名不可以赋值!
g) char *p={“abcdefgh”}; 错了!不能够出现大括号!
16)typedef 是取别名,不会产生新的类型,它同时也是关键字
考点一:typedef int qq 那么 int x 就可以写成 qq x
*p;
ch[10]={“abcdefgh”};
ch[10]=“abcdefgh”;
*p=“abcdefgh”;
p=“abcdefgh”;
f)char ch[10]; ch=“abcdefgh”;
考点二:typedef int *qq 那么 int *x就可以写成 qq x
17)static 考点是一定会考的!复习相关的习题。
static int x;默认值为0。 int x:默认值为不定值。