错题:
- 数组名表示地址常量,不能对其进行赋值。赋值前后要看类型是否一样。a[10],a是地址常量。
- int *p,m=5,n;如果scanf(“%d”,&n);*p=n;这样赋值是不对的,这里并没有给指针p指向,不能将变量n的值赋给p所指向的单元。正确的赋值:p=&n;*p=m;(错了3次)
- char *a=“china”;等价于char *a;*a=“china”;是不对的,赋值语句中的 *a表示a所指向位置的值,因此 *a="china"是不对的。char *a=“china”;等价于char *a;a=“china”;才对。(错了2次)
- char s[10];则s++不能表示s[1];数组名s是一个地址常量不能进行自增自减操作,正确表示s[1]的表达有s+1、&s[0]+1、&s[1]。如果硬要进行自增自减操作,则需要多2步操作*a=s;a++;这样使得指针变量a指向数组s的起始位置,因此自增自减才有意义。(错了4次)
- int(*p)[4]; 是一个指针,它指向一个含有4个整形元素的一维数组。
- 已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是 p=max;必须将函数名赋给指针变量。像*p=max(a,b)这样的赋值方法是错的。
- 当main函数带有参数时,传给形参的值只能从命令行中得到。
- 指针变量能够赋常量值或变量地址值。
- 字符串“ab\n\012\"”的长度为6,
“a b \n \012 \\ \"" \012八进制表示的字符\\反斜线\"双引号。
- 输入aa bb回车cc dd回车 scanf(“%s%s”,a1,a2);gets(a3);gets(a4);得到aa回车bb回车回车cc dd.
是因为gets(a3)把回车吃掉了! - scanf函数读入字符串时以空格、回车或Tab键作为输入结束,而gets函数读入字符串时只以回车作为结束。AhaMA Aha scanf读入时到空格就结束了!
- a[max],a[min] 初始值 max=min=0;
- b[i]=-999 看清题意!
- i<N-1还是i<N,看清题意!
- 递归类
//功能:将一个整数逆序放到一个字符数组中。483-->"384"
void convert(char *a,int n){
int i;
if((i=n/10)!=0) convert(a+1,i);
*a=(n%10)+'0';
}
//功能:求数组中的最大值及下标。
void findmax(int *a,int n,int i,int *pk){
if(i<n){
if(a[i]>a[*pk]) *pk=i;
findmax(a,n,i+1,pk);
}
}