三个C面试题!!没有搞懂
============三个找错题===================
试题1.
#define MAX 255
char pt[MAX+1];
char ch;
for(ch=0;ch <=MAX;ch++)
pt[ch]=ch;
for(ch= 'A ';ch <= 'Z ';ch++)
pt[ch]=ch+ 'a '- 'A ';
----------------------------
这个完全没有看懂错在那里
试题2.
char ch;
if(ch&0xof!=0xo8)
{
}
============================================
我理解为,&是取地址符号吧,
他的意思应该是&&吧
试题3.
void *fun(void *p,int size,char ch)
{
char * pt=(char *)p;
while(--size)
{
if(*pt==ch)
return pt;
}
return NULL;
}
======================================
我理解应该是返回值的问题
但具体问题我也不太确定
希望高手们指点
[解决办法]
试题1:ch最大值也就128,for(ch=0;ch <=MAX;ch++)这句就是循环了;
试题2:ch&0xof!=0xo8,按位与的话不可能出现结果为0x08的
因为0001 0000 与上任何一个数都不会出现xxxx 1xxx这种情况的;
试题3:
while(--size)
{
if(*pt==ch) //这句什么意义???,--size后这句又不会有变化的,是否写错了?
return pt;
}
要是pt为null,咋办
[解决办法]
试题2.
char ch;
if(ch&0xof!=0xo8)
{
}
================
这个是优先级的问题
!=优先级比按位与&高
会先执行0xof!=0xo8肯定不是想要的结果
多加一个括号就行了
if ((ch&0x0f)!=0x08)
[解决办法]
试题3. 如果是这样呢
void *fun(void *p,int size,char ch)
{
char * pt=(char *)p;
while(--size)
{
if(*pt==ch)
pt++;
return pt;
}
return NULL;
}
這樣題目還是不對。
首先pt++;位置放錯了
其次不應該返回pt.
而且--size使得查詢少了一次。
[解决办法]
第一题:
char ch;
在不同的编译器会解释成不同的类型(unsigned char, 或者有符号的),不管是哪种情况都不可能超过255的,因此第一题会出现死循环。避免死循环的方法就是定义成 int ch;
第二题:
if(ch&0xof != 0xo8) 类型是未定义的。
解决方法是if((char)ch&0x0f != (char)0x08);
第三题:
while(--size) //没有判断最后一个。
解决方法是while(size--)
[解决办法]
试题3.
void *fun(void *p,int size,char ch)
{
char * pt=(char *)p;
while(--size)
{
if(*pt==ch)
return pt;
}
return NULL;
}
======================================
不管这个题的意思,如果传入的size是一个负数,那么while循环就是一个无限循环,程序死定了.
[解决办法]
试题3 return返回的类型和函数要求的类型不一致
[解决办法]
char类型长度为一个字节(8bit),所以无论是不是unsigned char,都不会超过255.而第一题循环要结束,ch必须取到256。因此第一题是一个死循环。