Chinaunix首页 | 论坛 | 博客
  • 博客访问: 862829
  • 博文数量: 156
  • 博客积分: 6553
  • 博客等级: 准将
  • 技术积分: 3965
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-22 18:36
文章存档

2012年(3)

2011年(43)

2010年(110)

分类: C/C++

2010-10-20 16:38:15

第一题、求一个数有多少位1?
  int func ( x )
  {
  int countx = 0;
   while ( x )
   {
   countx ++;
  x = x&(x-1);
   }
   return countx;
  }
第二题、实现strcpy函数和strlen函数
char * strcpy( char *strDest, const char *strSrc )
{
 assert( (strDest != NULL) && (strSrc != NULL) );
 char *address = strDest;
 while( (*strDest++ = * strSrc++) != ‘\0’ );
  return address;
}

int strlen( const char *str ) //输入参数const
{
 assert( strt != NULL ); //断言字符串地址非0
 int len;
 while( (*str++) != '\0' )
 {
  len++;
 }
 return len;
}
试题4:为什么标准头文件都有类似以下的结构?
#ifndef __INCvxWorksh
#define __INCvxWorksh
#ifdef __cplusplus
extern "C" {
#endif
/*...*/
#ifdef __cplusplus
}
#endif
#endif /* __INCvxWorksh */
  解答:
  头文件中的编译宏
#ifndef __INCvxWorksh
#define __INCvxWorksh
#endif
  的作用是防止被重复引用。
  作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在symbol库中的名
字与C语言的不同。例如,假设某个函数的原型为:
void foo(int x, int y);
  该函数被C编译器编译后在symbol库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。
_foo_int_int这样的名字包含了函数名和函数参数数量及类型信息,C++就是考这种机制来实现函数重载的。
  为了实现C和C++的混合编程,C++提供了C连接交换指定符号extern "C"来解决名字匹配问题,函数声明前加
上extern "C"后,则编译器就会按照C语言的方式将该函数编译为_foo,这样C语言中就可以调用C++的函数了。
 
第五题

Char *ptr;
if ((ptr = (char *)malloc(0)) == NULL)
puts("Got a null pointer");
else
puts("Got a valid pointer");

输出结果是Got a valid pointer

第六题、下面输出什么?
#include
#include
int main()
{
 char *p1="name";
 char *p2;
 p2=(char*)malloc(20);
 memset (p2, 0, 20);
 while(*p2++ = *p1++);
 printf("%s \n",p2);
 return 0;
}
注意:p2移动后没返回到字符串首地址
阅读(665) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-21 11:30:34

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com

chinaunix网友2010-10-21 11:30:20

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com