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--;
printf("%s", dest);
}
如何判断一段程序是由C编译程序还是由C++编译程序编译的?
1.
#ifdef __cplusplus
cout<<"c++";
#else
cout<<"c";
#endif
2.用nm来查看函数名入口
关键字const有什么含意?
const int a;
int const a;
const int *a;
int * const a;
int const *a const;
new delete 与 malloc free的联系与区别?
1. malloc 空间大小需要手动计算,new 是由编译器计算
2. malloc 返回类型为void *,要强转。 new 直接返回对应类型指针。
3. malloc/free为函数只开空间并释放,new/delete则不仅会开辟空间,并调用构造函数和析构函数 进行初始化和清理
4. 最后一点对于new/delete与malloc/free申请内存位置说明,malloc我们知道它是在堆上分配内存的,但new其实不能说是在堆上,C++中,对new申请内存位置有一个抽象概念,它为自由存储区,它可以在堆上,也可以在静态存储区上分配,这主要取决于operator new实现细节,取决与它在哪里为对象分配空间。所以有一些说法:new在堆上分配内存,可以说是不太精确的。
struct 和 class的区别?
struct能包含成员函数吗? 能!
struct能继承吗? 能!!
struct能实现多态吗? 能!!!
1. 默认的继承访问权限
那么多态的作用是什么呢,封装可以使得代码模块化,继承可以扩展已存在的代码,他们的目的都是为了代码重用。而多态的目的则是为了接口重用。