return [[self sharedManager] retain]; }
- (id)copyWithZone:(NSZone *)zone { return self; }
- (id)retain { return self; }
- (NSUIntger)retainCount { return NSUIntgerMax; }
- (oneway void)release { }
- (id)autorelease { return self; }
-(void)dealloc{ }
57请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1 int checkCPU( ) { { union w { int a; char b; } c; c.a = 1; return (c.b ==1); } }
剖析:嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节, Big-endian 模式的CPU对操作数
的存放方式是从高字节到低字节。在弄清楚这个之前要弄清楚这个问题:字节从右到坐为从高到低! 假设从地址0x4000开始存放: 0x12345678,是也个32位四个字节的数据,最高字节是0x12,最低字节是0x78:在Little-endian模式CPU内存中的存放方式为: (高字节在高地址, 低字节在低地址)
内存地址0x4000 0x4001 0x4002 0x4003 存放内容 0x78 0x56 0x34 0x12 大端机则相反。
有的处理器系统采用了小端方式进行数据存放,如Intel的奔腾。有的处理器系统采用了大端方式进行数据存放,如IBM半导体和Freescale的PowerPC处理器。不仅对于处理器,一些外设的设计中也存在着使用大端或者小端进行数据存放的选择。因此在一个处理器系统中,有可能存在大端和小端模式同时存在的现象。这一现象为系统的软硬件设计带来了不小的麻烦,这要求系统设计工程师,必须深入理解大端和小端模式的差别。大端与小端模式的差别体现在一个处理器的寄存器,指令集,系统总线等各个层次中。 联合体union的存放顺序是所有成员都从低地址开始存放的。以上是网上的原文。让我们看看在ARM处理器上union是如何存储的呢? 地址A ---------------- |A |A+1 |A+2 |A+3 |int a; | | | | -------------------- |A |char b; | |
--------- 如果是小端如何存储c.a的呢? 地址A ----------- ------------------- |A |A+1 |A+2 |A+3 | int a;
|0x01 |0x00 |0x00 |0x00 | ------------------------------------- |A |char b; | | ---------
如果是大端如何存储c.a的呢? 地址A ---------------------
--------- |A |A+1 |A+2 |A+3 |int a; |0x00 |0x00 |0x00 |0x01 | ------------------------------------------ |A |char b; | |
--------- 现在知道为什么c.b==0的话是大端,c.b==1的话就是小端了吧。
58
堆和栈上的指针
指针所指向的这块内存是在哪里分配的,在堆上称为堆上的指针,在栈上为栈上的指针. 在堆上的指针,可以保存在全局数据结构中,供不同函数使用访问同一块内存.
在栈上的指针,在函数退出后,该内存即不可访问.
59什么是指针的释放? 具体来说包括两个概念.
1 释放该指针指向的内存,只有堆上的内存才需要我们手工释放,栈上不需要. 2 将该指针重定向为NULL.
60数据结构中的指针?
其实就是指向一块内存的地址,通过指针传递,可实现复杂的内存访问. 7 函数指针?
指向一块函数的入口地址.
8 指针作为函数的参数?
比如指向一个复杂数据结构的指针作为函数变量
这种方法避免整个复杂数据类型内存的压栈出栈操作,提高效率. 注意:指针本身不可变,但指针指向的数据结构可以改变.
9 指向指针的指针?
指针指向的变量是一个指针,即具体内容为一个指针的值,是一个地址. 此时指针指向的变量长度也是4位.
61指针与地址的区别? 区别:
1指针意味着已经有一个指针变量存在,他的值是一个地址,指针变量本身也存放在一个长度为四个字节的地址当中,而地址概念本身并不代表有任何变量存在. 2 指针的值,如果没有限制,通常是可以变化的,也可以指向另外一个地址.
地址表示内存空间的一个位置点,他是用来赋给指针的,地址本身是没有大小概念,指针指向变量的大小,取决于地址后面存放的变量类型.
62指针与数组名的关系?
其值都是一个地址,但前者是可以移动的,后者是不可变的.
12 怎样防止指针的越界使用问题? 必须让指针指向一个有效的内存地址, 1 防止数组越界
2 防止向一块内存中拷贝过多的内容 3 防止使用空指针
4 防止改变const修改的指针 5 防止改变指向静态存储区的内容 6 防止两次释放一个指针 7 防止使用野指针.
13 指针的类型转换?
指针转换通常是指针类型和void * 类型之前进行强制转换,从而与期望或返回void指针的函数进行正确的交接.
63static有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7. 引用与指针有什么区别? 1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。 2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性
在特定时间内完成特定的任务,实时性与可靠性
64全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈 10. 什么是平衡二叉树?
左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1
65堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源
12. 什么函数不能声明为虚函数? constructor
13. 冒泡排序算法的时间复杂度是什么? O(n^2)
14. 写出float x 与―零值‖比较的if语句。
if(x>0.000001&&x<-0.000001)
16. Internet采用哪种网络协议?该协议的主要层次结构? tcp/ip 应用层/传输层/网络层/数据链路层/物理层 17. Internet物理地址和IP地址转换采用什么协议? ARP (Address Resolution Protocol)(地址解析協議) 18.IP地址的编码分为哪俩部分?
IP地址由两部分组成,网络号和主机号。不过是要和―子网掩码‖按位与上之后才能区
分哪些是网络位哪些是主机位。
2.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写 出C程序。
循环链表,用取余操作做 3.不能做switch()的参数类型是: switch的参数不能为实型。 華為
1、局部变量能否和全局变量重名?
答:能,局部会屏蔽全局。要用全局变量,需要使用\
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而
不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变
量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那
个循环体内
2、如何引用一个已经定义过的全局变量? 答:extern
可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个
在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你
用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连