快速业务通道

C++经典面试题

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
变量,即指针指向为常量;

如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。

(1)const char *p

一个指向char类型的const对象指针,p不是常量,我们可以修改p的值,使其指向不同的char,但是不能改变它指向非char对象,如:
const char *p;
char c1=''a'';
char c2=''b'';
p=&c1;//ok
p=&c2;//ok
*p=c1;//error

(2)char const *p

(3)char * const p

这两个好象是一样的,此时*p可以修改,而p不能修改。

(4)const char * const p

这种是地址及指向对象都不能修改。

--------------------------------------------------------------------------

6.下面是C语言中两种if语句判断方式。请问哪种写法更好?为什么?

int n;

if (n == 10) // 第一种判断方式

if (10 == n) // 第二种判断方式

如果少了个=号,编译时就会报错,减少了出错的可能行,可以检测出是否少了=

--------------------------------------------------------------------------

7.下面的代码有什么问题?

void DoSomeThing(...)
{
char* p;
...
p = malloc(1024); // 分配1K的空间
if (NULL == p)
 return;
...
p = realloc(p, 2048); // 空间不够,重新分配到2K
if (NULL == p)
 return;
...
}

A:

p = malloc(1024);   应该写成: p = (char *) malloc(1024);

没有释放p的空间,造成内存泄漏。

--------------------------------------------------------------------------

8.下面的代码有什么问题?并请给出正确的写法。

void DoSomeThing(char* p)
{
char str[16];
int n;
assert(NULL != p);
sscanf(p, "%s%d", str, n);
if (0 == strcmp(str, "something"))
{
 ...
}
}

A:

sscanf(p, "%s%d", str, n);  这句该写成: sscanf(p, "%s%d", str, &n);

--------------------------------------------------------------------------

9.下面代码有什么错误?

Void test1()
{
char string[10];
char *str1="0123456789";
strcpy(string, str1);
}

数组越界

--------------------------------------------------------------------------

10.下面代码有什么问题?

Void test2()
{
 char string[10], str1[10];
 for(i=0; i<10;i++)
 {
   str1[i] =''a'';
 }
 strcpy(string, str1);
}

数组越界

--------------------------------------------------------------------------

11.下面代码有什么问题?

Void test3(char* str1)
{
 char string[10];
 if(strlen(str1)<=10)
 {
  strcpy(string, str1);
 }
}

==数组越界

==strcpy拷贝的结束标志是查找字符串中的 因此如果字符串中没有遇到的话 会一直复制,直到遇到,上面的123都因此产生越界的情况

建议使用 strncpy 和 memcpy

--------------------------------------------------------------------------

12.下面代码有什么问题?

#define MAX_SRM 256
DSN get_SRM_no()
{
 static int SRM_no; //是不是这里没赋初值?
 int I;
 for(I=0;I<MAX_SRM;I++,SRM_no++)
 {
  SRM_no %= MAX_SRM;
  if(MY_SRM.state==IDLE)
  {
   break;
  }
 }
 if(I>=MAX_SRM)
  return (NULL_SRM);
 else
  return SRM_no;
}

系统会初始化static int变量为0,但该值会一直保存,所谓的不可重入...

--------------------------------------------------------------------------

13.写出运行结果:

{// test1
  char str[] = "world"; cout << sizeof(str) << ": ";
  char *p  = str;   cout << sizeof(p) << ": ";
  char i  

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号