笔试题2

1 用变量a给出下面的定义
a) 一个整型数 //int a;
b) 一个指向整型数的指针// int *a;
c) 一个指向指针的指针,它指向的指针是指向一个整型数 //int **a;
d) 一个有10个整型数的数组// int a[10];
e) 一个有10个指针的数组, 该指针是指向一个整型数的.// int *a[10];
f) 一个指向有10个整型数数组的指针// int (*a)[10];
g) 一个指向函数的指针, 该函数有一个整型参数并返回一个整型数。//int (*a)(int)
h) 一个有10个指针的数组, 该指针指向一个函数, 该函数有一个型型参数并返回一个整型数 // int (*a[10](int))
假设在32位CPU上,填空:
struct BBB {
    long num;
    char *name;
    short int data;
    char ha;
    short ba[5];    
}*p;
sizeof(p) = 4 * 4 + 2 + 1 + 1(补位) + 2 *5 +2(补位) = 24;

p = 0x1000000;
p + 0x200 = 0x1000000 + 0x200 * 24;
(unsigned long *)p + 0x200 = 0x1000000 + 0x200 * 2;
(char *)p + 0x200 = 0x1000000 + 0x200 * 1;

结论:

某一类型的指针 +  一个常数 =  这个常数 * 指针所指区域的大小。
下面这个程序有问题吗?如果有请修正.
#include <stdio.h>

int main(void)
{
    int **p;
    int arr[100];
    p = &arr;
    return 0;
}

改正
    #include <stdio.h>

int main(void)
{
    int **p, *q;
    int arr[100];
    q = arr;
    p = &q;
    return 0;
}
下面这个程序有问题吗?如果有请修正.
#include string.h

void maine(void)
{
    char *src = "hello,world";
    char *dest = NULL;
    dest = (char *)malloc(strlen(src));
    int len = strlen(str);
    char *d = dest;
    char *s = src[len];
    while (len-- != 0)
        d++ = s--; // *d++ = *(s+len); 改
    printf("%s", dest);

}
如何判断一段程序是由C编译程序还是由C++编译程序编译的?
1.
#ifdef __cplusplus
       cout<<"c++";
#else
       cout<<"c";
#endif

2.用nm来查看函数名入口
关键字const有什么含意?
const int a;// a 为常量
int const a;// a 为常量
const int *a;// const 修饰指向的对象 a能变 , a 指向的对象不可变
int * const a;// const 修饰指针a ,  a不能变, a 指向的对象可变
int const *a const;//
new deletemalloc free的联系与区别?

 1. malloc 空间大小需要手动计算,new 是由编译器计算
 2. malloc 返回类型为void *,要强转。 new 直接返回对应类型指针。
 3. malloc/free为函数只开空间并释放,new/delete则不仅会开辟空间,并调用构造函数和析构函数 进行初始化和清理
 4. 最后一点对于new/deletemalloc/free申请内存位置说明,malloc我们知道它是在堆上分配内存的,但new其实不能说是在堆上,C++中,对new申请内存位置有一个抽象概念,它为自由存储区,它可以在堆上,也可以在静态存储区上分配,这主要取决于operator new实现细节,取决与它在哪里为对象分配空间。所以有一些说法:new在堆上分配内存,可以说是不太精确的。
structclass的区别?
struct能包含成员函数吗? 能!
struct能继承吗? 能!!
struct能实现多态吗? 能!!! 

 1. 默认的继承访问权限
那么多态的作用是什么呢,封装可以使得代码模块化,继承可以扩展已存在的代码,他们的目的都是为了代码重用。而多态的目的则是为了接口重用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值