C语言笔试

来源:互联网 发布:雪梨淘宝店衣服怎样 编辑:程序博客网 时间:2024/04/26 04:20

请写出BOOL flag 与“零值”比较的 if 语句
if(flag)
if(!flag)

请写出float x 与“零值”比较的 if 语句

const float fFlag = 0.00001;
if((-fFlag <= x)&&(x <= fFlag))

请写出char *p 与“零值”比较的 if 语句

if(p == NULL)
if(p !=NULL)

Windows NT下的32位C++程序,请计算sizeof的值

char *p = str ;
char str[] = “Hello” 
sizeof (str ) = 6 
sizeof ( p ) = 4 
void Func ( char str[100])

{

请计算

sizeof( str ) = 4

}
void *p = malloc( 100 );

请计算

sizeof ( p ) = 4

头文件中的 ifndef/define/endif 干什么用?

防止头文件被重复定义,那样会加大系统开销。

const 有什么用途?(请至少说明两种)

const int i = 100; //保证 i 的值不被修改
class A
{
  public:
      void Fun()const; //保证传近来的对象不被修改

const int *pi = "Hello World";  //保证pi所指的内容不被修改
int *const pi = "Hello World";  //保证pi指向的地址不改变
const int *const pi = "Hello World"; //保证pi指向的地址和pi指向的内容都
                                     //不会改变


请简述以下两个for循环的优缺点
for (i=0; i < 10; i++)
{
if (condition)
DoSomething();
else
DoOtherthing();
}


if (condition)
{
for (i = 0; i < 10; i++)
DoSomething();
}
else
{
for (i=0; i
DoOtherthing();
}
第一个可读性好,但是效率差
第二个可读性不好,但是效率高

void GetMemory(char *p)
{
p = (char *)malloc(100);
}

void Test(void) 
{
char *str = NULL;
GetMemory(str); 
strcpy(str, "hello world");
printf(str);
}
请问运行Test函数会有什么样的结果?

GetMemory(char *p) 这里会为*p创建一个副本比如char* _p
编译器让 _p = p,在函数体内对于_p自身的修改都作用于 p 上
p = (char *)malloc(100); 这里只是改变了 _p 所指向的内容
因此也就不作用于 p 上,所以GetMemory(str);这里str 依然
为NULL.而且上面的代码会导致内存泄漏.

char *GetMemory(void)

char p[] = "hello world";
return p;
}

void Test(void)
{
char *str = NULL;
str = GetMemory(); 
printf(str);
}
请问运行Test函数会有什么样的结果?

GetMemory返回的是一个数组的首地址 
这个首地址是在栈上申请的
因此函数结束后被销毁
它所指向的内容被系统回收

void GetMemory2(char **p, int num)

{

*p = (char *)malloc(num);

}

void Test(void)

{

char *str = NULL;

GetMemory(&str, 100);

strcpy(str, "hello");

printf(str);

}

GetMemory(&str, 100)会为 str 动态申请一个空间
这里可以正常输出但是,会造成内存泄漏


转载与:http://blog.csdn.net/liujiwei2007/article/details/1573234

0 0
原创粉丝点击