[C++面试高频]C++基础(十二)

1.指针数组与数组指针

①char *p[10],该语句声明了一个有10个元素的指针数组p,每个元素是一个char *类型指针,这些指针存放着对应字符串的首地址。每个元素指向一个字符串。

②数组指针是指向数组的指针,它指向数组的首地址。

int *p1[5];//指针数组
int (*p2)[5];//数组指针

2.并发线程的互斥与同步

①同一进程中线程之间的局部变量不会相互影响,不需要互斥;如果成员变量是要共享的,只要改变就需要互斥。

② 不同进程之间的变量不一样,互不影响,不需要互斥。

3.共用体

union pw
{
  	int i;
	char ch[2];
}a;

main() 
{
   a.ch[0]=13;   
	a.ch[1]=0;
   printf("%d\n",a.i);
}

结果输出为13

①ch[0]存储一个整数的高八位,ch[1]存储一个整数的低八位;

②共用体变量共享一个内存空间;

③共用体变量起作用的是最后一次存放的成员,存入一个新成员后,原有的成员就失去作用了。

4.常见的寻址方式

直接寻址,间接寻址,寄存器寻址,立即寻址

寻址速度:

立即寻址>寄存器寻址>直接寻址>间接寻址

5.构造函数必须与类同名,可以有多个同名构造函数,参数列表可以不同,析构函数只有一个。

6.在C语言中,非法的八进制是:( A )

A. 018    B. 016    C. 017    D. 0257

解析:八进制字符只有0-7,所以018不是八进制,8超过0-7范围

7.全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

可以。需要在不同的C文件中用stastic关键字声明同名的全局变量。但是只能在一个C文件中对该变量进行赋值,以保证连接不会出错。

8.栈stack”和“堆heap”有什么区别,写两个函数分别在栈上和堆上分配内存,在堆上分配内存应该注意哪些问题

 栈的空间通常由操作系统申请或释放,而堆的空间是手动申请和释放,通常使用new来申请。

  1. 堆是先进先出的数据结构,而栈是先进后出的数据结构。
  2. 堆存放在二级缓存中,而栈使用一级缓存,调用完立即释放
  3. 堆的寻址效率比栈要低,因为栈是直接寻址而堆是间接寻址。
  4. 堆可申请的空间较大,栈较小。

栈由系统自动分配,速度较快,堆申请一般较慢。

//堆上:
void fun1()
{
int p =(int ) malloc(3*sizeof(int));
free(p);
}
//栈上:
void fun1()
{
int p;
}

在堆上申请的内存用完需要记得释放,否则可能造成内存泄漏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值