几道关于C的面试题,不难,但是有些地方值得注意
1 设
int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=123;
printf("%d,%d",*ptr,*(++ptr));
输出结果为8,8
其中有几个关键点:
1 )*(ptr++)+=123; ptr++先引用值,后ptr++,因此结果为arr的第一个元素6+123=129,ptr这时指向第二个元素。
2)printf("%d,%d",*ptr,*(++ptr)); 是关于函数实参求值顺序的问题,C语言没有规定函数实参的求值顺序,所以输出根据不同的编译器可能有不同的结果,如果是自右向左求值的话,结果是8,8,如果是自左向右求值的话,结果应该是7,8
2 不使用库函数,编写函数int strcmp(char *source, char *dest)
相等返回0,不等返回-1;
int strcmp(char* src, char* dst)
{
int result=0;
while(!(result=*src-*dst) && *dst)
{
src++;
dst++;
}
if(result!=0)
result = -1;
return result;
}
3 写一函数int fun(char *p)判断一字符串是否为回文,是返回1,不是返回0,出错返回-1
int fun(char* p)
{
assert(p != NULL);
int result = -1;
char* head = p;
int len = strlen(p);
char* end = p+ len -1;
int i=0;
for(i=0; i<len/2; i++)
{
if(*head++ != *end--)
break;
}
result = i<len/2 ? 0:1;
return result;
}
posted on 2008-02-27 19:46
Magic 阅读(357)
评论(0) 编辑 收藏 引用 所属分类:
C/C++