随笔-20  评论-0  文章-0  trackbacks-0
几道关于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 阅读(358) 评论(0)  编辑 收藏 引用 所属分类: C/C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理