1.结构体的大小
struct name1{
char str;
short x;
int num;
};求sizeof(name1)?
int所占字节是最大的为4,以它为参照标准
char所占字节为1,short所占字节为2, int所占字节为4
一个圈⭕代表一个字节
⭕char ⭕⭕short ⭕空 ⭕⭕⭕⭕int
sizeof(name1) = 8
struct name2{
char str;
int num;
short x;
};求sizeof(name2)?
⭕⭕⭕⭕ | ⭕⭕⭕⭕ | ⭕⭕⭕⭕
sizeof(name2)=12
给定结构struct A
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
};问sizeof(A) = ?
sizeof(A) = 8
2.数组和链表的区别?(3点)
(1)大小方面:数组大小在定义时就已经确定,而链表不是;
(2)存储地址:数组元素存储地址连续,而链表不一定是;
(3)插入与删除操作:数组的这些操作都需要移动数组中的元素,而链表只需要改变指针即可。
3.c和c++中的struct有什么不同?
(1)c 中的 struct 不可以含有成员函数,而 c++ 中的 struct 可以。
(2)c++ 中 struct 默认为权限为 public,而 class 默认为 private。
4.要对绝对地址 0x100000 赋值,我们可以用 (unsigned int *)0x100000 = 1234; 那么要是想让程序跳转到绝对地址是 0x100000 去执行,应该怎么做?
1)首先要将 0x100000 强制转换成函数指针,即:
(void (*)())0x100000
2)然后再调用它:
((void (*)())0x100000)();
5.int a,b,c 请写函数实现c=a+b ,不可以改变数据类型,如将c改为long int,关键是如何处理溢出问题
// 1. 两个正数相加;
a > 0 && b > 0 就是判断两数都是正数;
如果没有溢出,则和 c 必定大于 a、b, 反之溢出;
// 2. 两负数相加;
a < 0 && b < 0 判断两数都是负数;
如果没有溢出,则和 c 必定小于 a、b, 反之溢出;
// 3. 综上
return (a>0 && b>0 && (*c<a||*c<b) || (a<0 && b<0 && (*c>a || *c>b)));
bool add (int a, int b,int *c)
{
*c=a+b;
return (a>0 && b>0 &&(*c<a || *c<b) || (a<0 && b<0&&(*c>a || *c>b)));
}
6.关键字
1)volatile有什么含意? 并给出三个不同的例子。
一个定义为volatile的变量是说,这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
(1)并行设备的硬件寄存器(如:状态寄存器)
(2)一个中断服务子程序中会访问到的非自动变量
(3)多线程应用中被几个任务共享的变量
2)const 关键字的作用
(1)可以定义const常量,具有不可变性
(2)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。
(3)为 c++ 函数重载提供了一个参考。
class A {
void f(int i) {......} //一个函数
void f(int i) const {......} //上一个函数的重载
};
(4) 可以节省空间,避免不必要的内存分配
(5) 提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
3)static关键字的作用
1.限制变量的作用域(static全局变量);
2.设置变量的存储域(static局部变量)。
- (1)在修饰变量的时候,static 修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。
- (2)static 修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是 extern 外部声明也不可以。
- (3)static 修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。static 修饰的变量存放在全局数据区的静态变量区,包括全局静态变量和局部静态变量,都在全局数据区分配内存。初始化的时候自动初始化为 0。
- (4)不想被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用 static 修饰。
- (5)考虑到数据安全性(当程序想要使用全局变量的时候应该先考虑使用 static)。