1) 共有五个求sizeof的值的题目(其他三个都是常见面试题目都能见到的,写下面两个有点容易忽略的):
char *p = "hello" sizeof(p) =?
char p[] = "hello" sizeof(p) =?
2) 把一个数字字符串改成数字,如"12345" 改成数字1234,不可以使用C库函数
3) 用最高效率方法求 1-2+3-4+5...+n的值。
4) 程序改错和写成运行结果,程序大概如下:
int main()
{
char* str = "123456789";
char* pchar = str;
long* plong = str;
pchar++;
plong++;
printf("<%d> [%d] , %s/n", sizeof(char), sizeof(pchar), pchar );
printf("<%d> [%d] , %s/n", sizeof(long), sizeof(plong), plong );
return 0;
}
下面是我做的答案,仅供参考:
1) 共有五个求sizeof的值的题目(其他三个都是常见面试题目都能见到的,写下面两个有点容易忽略的):
char *p = "hello" sizeof(p) = 4 // 这个我当时大意了写了个6
char p[] = "hello" sizeof(p) = 6
2) 把一个数字字符串改成数字,如"12345" 改成数字1234,不考虑负数,不可以使用C库函数
// 应该还要加上int是否overflow和字符串是否是数字串的判断,
// 为了简洁,写一个核心。我完全没有想到可以用减法,我局限到用ascii去转换单个的数字了...
int StringToNumber(const char* string) {
const char* p = string;
int number = 0;
while (*p != '/0') {
number = number*10 + (*p-'0'); // 这句是核心,值得思考
p++;
}
return number;
}
3) 用最高效率方法求 1-2+3-4+5-6+7...n的值。
// 这个比较简单,主要要注意的是分析下表达式的特点后再计算
int Calc(int n) {
if ( n%2 == 0 )
return (n/2) * (-1);
else
return ((n-1)/2) * (-1) + n;
}
4) 程序改错和写成运行结果,程序大概如下:
int main()
{
char* str = "123456789";
char* pchar = str;
long* plong = str; //这里转换下(地球人都知道的,,,哎)改成:long* plong = (long*)str;
pchar++;
plong++;
printf("<%d> [%d] , %s/n", sizeof(char), sizeof(pchar), pchar );
printf("<%d> [%d] , %s/n", sizeof(long), sizeof(plong), plong );
return 0;
}
这个题目还是考指针的长度。。。。
输出结果:
<1> [4] , 23456789
<4> [4] , 56789
BTW:我只是觉得第二题目出的不错。