首页>计算机等级考试>历年真题>正文
常见c++笔试题整理(含答案)

www.zige365.com 2010-7-13 14:03:04 点击:发送给好友 和学友门交流一下 收藏到我的会员中心

如果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
(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
拷贝的结束标志是查找字符串中的\0 因此如果字符串中没有遇到\0的话 会一直复制,直到遇到\0,上面的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) << ": ";

本新闻共15页,当前在第2页  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  

我要投稿 新闻来源: 编辑: 作者:
相关新闻