幾道關于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 閱讀(365)
評論(0) 編輯 收藏 引用 所屬分類:
C/C++