一、判断题
1、有数组定义int a[2][2]={{1},{2,3}};则a[0][1]的值为0。(正确)
2、int (*ptr) (),则ptr是一维数组的名字。(错误 int (*ptr) ();定义一个指向函数的指针变量 )
3、指针在任何情况下都可进行>,<,>=,<=,==运算。(错误)
4、switch(c) 语句中c可以是int ,long,char ,float ,unsigned int 类型。( 错,不能用实形)
二、填空题
1、在windows下,写出运行结果
char str[ ]= "Hello";
char *p=str;
int n=10;
sizeof(str)=( )
sizeof(p)=( )
sizeof(n)=( )
void func(char str[100]){ }
sizeof(str)=( )
答案:6,4,4,4
2、
{
* p = ( char * ) malloc(num);
}
void test( void )
{
char * str = NULL;
getmemory( & str, 100 );
strcpy(str, " hello " );
printf(str);
}
运行test函数有什么结果?( )
答案:输出hello,但是发生内存泄漏。
3、
设int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=123;
printf("%d,%d", *ptr, *(++ptr));
答案:8,8。这道题目的意义不大,因为在不同的编译器里printf的参数的方向是不一样的,在vc6.0下是从有到左,这里先*(++ptr) 后*pt,于是结果为8,8
二、编程题
1、不使用库函数,编写函数int strcmp(char *source, char *dest)
相等返回0,不等返回-1;
答案:一、
{
assert((source != NULL) && (dest != NULL));
int i,j;
for (i = 0 ; source[i] == dest[i]; i ++ )
{
if (source[i] == ' \0 ' && dest[i] == ' \0 ' )
return 0 ;
else
return - 1 ;
}
}
答案:二、
{
while ( ( * source != ' \0 ' ) && ( * source == * dest))
{
source ++ ;
dest ++ ;
}
return ( ( * source) - ( * dest) ) ? - 1 : 0 ;
}
2、 写一函数int fun(char *p)判断一字符串是否为回文,是返回1,不是返回0,出错返回-1
答案:一、
{
if (p == NULL)
return - 1 ;
else
{
int length = 0 ;
int i = 0 ;
int judge = 1 ;
length = strlen(p);
for (i = 0 ; i < length / 2 ; i ++ )
{
if (p[i] != p[length - 1 - i])
judge = 0 ;
break ;
}
if (judge == 0 )
return 0 ;
else
return 1 ;
}
}
答案:二、
{
int len = strlen(p) - 1 ;
char * q = p + len;
if ( ! p)
return - 1 ;
while (p < q)
{
if (( * p ++ ) != ( * q -- ))
return 0 ;
}
return 1 ;
}