幾道關(guān)于C的面試題,不難,但是有些地方值得注意
1 設(shè)
int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=123;
printf("%d,%d",*ptr,*(++ptr));
輸出結(jié)果為8,8
其中有幾個(gè)關(guān)鍵點(diǎn):
1 )*(ptr++)+=123; ptr++先引用值,后ptr++,因此結(jié)果為arr的第一個(gè)元素6+123=129,ptr這時(shí)指向第二個(gè)元素。
2)printf("%d,%d",*ptr,*(++ptr)); 是關(guān)于函數(shù)實(shí)參求值順序的問題,C語言沒有規(guī)定函數(shù)實(shí)參的求值順序,所以輸出根據(jù)不同的編譯器可能有不同的結(jié)果,如果是自右向左求值的話,結(jié)果是8,8,如果是自左向右求值的話,結(jié)果應(yīng)該是7,8
2 不使用庫函數(shù),編寫函數(shù)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 寫一函數(shù)int fun(char *p)判斷一字符串是否為回文,是返回1,不是返回0,出錯(cuò)返回-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)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
C/C++