反编译之后的switch嵌套

编程自留地 2012-04-19 04:20:00
这里面有个switch语句的嵌套,下面红色的部分。怎么还原啊?
public void onCreate(Bundle bundle)
{

_L3:
int k;
int l;
k = 0;
l = 0;
_L35:
mServer.mColorDepth;
JVM INSTR lookupswitch 3: default 336
// 100: 1976
// 200: 1983
// 300: 1990;
goto _L14 _L15 _L16 _L17
_L14:
byte byte0 = 16;
_L36:
SoundParameters soundparameters = null;
mServer.mSoundOption;
JVM INSTR tableswitch 0 2: default 376
// 0 1997
// 1 2003
// 2 2009;
goto _L18 _L19 _L20 _L21
_L18:
boolean flag8 = false;
_L37:
mServer.mSecurityLayerOption;
JVM INSTR tableswitch 1 2: default 408
// 1 2119
// 2 2128;
goto _L22 _L23 _L24
_L22:
int i1;
boolean flag9;
i1 = 1;
flag9 = true;
_L38:
TpktLayer tpktlayer;
UnicodeToUsEnglishKeyboardMapper unicodetousenglishkeyboardmapper;
String s8;
SharedPreferences sharedpreferences1 = sharedpreferences;
String s6 = "pref_warn_ssl_cert_untrusted";
boolean flag10 = false;
if(sharedpreferences1.getBoolean(s6, flag10))
{
AndroidCertificateManager androidcertificatemanager = JVM INSTR new #507 <Class AndroidCertificateManager>;
AndroidCertificateManager androidcertificatemanager1 = androidcertificatemanager;
SessionActivity sessionactivity = this;
androidcertificatemanager1.AndroidCertificateManager(sessionactivity);
AndroidCertificateManager androidcertificatemanager2 = androidcertificatemanager;
mCertificateManager = androidcertificatemanager2;
mCertificateManager.init();
}
String s7 = mServer.mHost;
int j1 = mServer.mPort;
AndroidNetworkWaiter androidnetworkwaiter = JVM INSTR new #525 <Class AndroidNetworkWaiter>;
ConnectivityManager connectivitymanager = (ConnectivityManager)getApplicationContext().getSystemService("connectivity");
AndroidNetworkWaiter androidnetworkwaiter1 = androidnetworkwaiter;
ConnectivityManager connectivitymanager1 = connectivitymanager;
androidnetworkwaiter1.AndroidNetworkWaiter(connectivitymanager1);
CertificateManager certificatemanager = mCertificateManager;
tpktlayer = new TpktLayer(s7, j1, androidnetworkwaiter, certificatemanager);

s8 = "";
if(!App.getApp(this).isMasterPasswordEnabled()) goto _L26; else goto _L25
_L25:
javax.crypto.SecretKey secretkey = App.getApp(this).getPasswordKey();
if(secretkey == null) goto _L28; else goto _L27
_L27:
int k1 = mServer.mPassword.length();
if(k1 == null) goto _L28; else goto _L29
_L29:
String s9;
App app = App.getApp(this);
String s10 = mServer.mPassword;
App app1 = app;
String s11 = s10;
javax.crypto.SecretKey secretkey1 = secretkey;
s9 = app1.decryptPassword(s11, secretkey1);
s8 = s9;
_L28:
SharedPreferences sharedpreferences4;
String s17;
boolean flag23;
Device adevice[] = (Device[])null;


if(sharedpreferences4.getBoolean(s17, flag23)) goto _L31; else goto _L30
_L30:
mVerticalScrollBarView.setVisibility(8);
_L39:
SharedPreferences sharedpreferences5;
String s18;
boolean flag24;
sharedpreferences5 = sharedpreferences;
s18 = "pref_horizontal_scroll_bar_key";
flag24 = true;
if(sharedpreferences5.getBoolean(s18, flag24)) goto _L33; else goto _L32
_L32:
mHorizontalScrollBarView.setVisibility(8);
_L40:
VerticalScrollBar verticalscrollbar1 = mVerticalScrollBarView;
IbmEnhKeyboardEmulator ibmenhkeyboardemulator4 = mIbmEnhKeyboardEmulator;
verticalscrollbar1.mIbmEnhKeyboardEmulator = ibmenhkeyboardemulator4;
HorizontalScrollBar horizontalscrollbar1 = mHorizontalScrollBarView;
IbmEnhKeyboardEmulator ibmenhkeyboardemulator5 = mIbmEnhKeyboardEmulator;
horizontalscrollbar1.mIbmEnhKeyboardEmulator = ibmenhkeyboardemulator5;
SessionActivity sessionactivity8 = this;
int l3 = 0x7f0a002c;
WindowsKeyboardView windowskeyboardview = (WindowsKeyboardView)sessionactivity8.findViewById(l3);
mWindowsKeyboardView = windowskeyboardview;
SessionActivity sessionactivity9 = this;
boolean flag25 = flag;
boolean flag26 = flag1;
boolean flag27 = flag2;
boolean flag28 = flag3;
sessionactivity9.initWindowsKeyboards(flag25, flag26, flag27, flag28);
mWindowsKeyboardView.setVisibility(8);
SessionActivity sessionactivity10 = this;
int i4 = 0x7f0a002b;
ZoomControls zoomcontrols = (ZoomControls)sessionactivity10.findViewById(i4);
setZoomControls(zoomcontrols);
mZoomControls.setVisibility(8);
setClickListeners();
mSessionView.processNewSurfaceParameters();
return;

_L2:
GeneralSecurityException generalsecurityexception;
RdpClientEngine rdpclientengine9;
Object aobj[];
String s20;
SessionActivity sessionactivity11;
int j4;
Object aobj1[];
String s21;
SessionActivity sessionactivity12;
int k4;
String s22;
Intent intent = getIntent();
String s19 = "com.xtralogic.android.rdpclient.server";
Server server1 = (Server)intent.getSerializableExtra(s19);
mServer = server1;
goto _L34
_L4:
k = 640;
l = 480;
goto _L35
_L5:
k = 720;
l = 480;
goto _L35
_L6:
k = 800;
l = 600;
goto _L35
_L7:
k = 1024;
l = 768;
goto _L35
_L8:
k = 1280;
l = 1024;
goto _L35
_L9:
k = 1440;
l = 900;
goto _L35
_L10:
k = 1400;
l = 1050;
goto _L35
_L11:
k = 1680;
l = 1050;
goto _L35
_L12:
k = 1600;
l = 1200;
goto _L35
_L13:
k = 1920;
l = 1080;
goto _L35
_L15:
byte0 = 8;
goto _L36
_L16:
byte0 = 16;
goto _L36
_L17:
byte0 = 24;
goto _L36
_L19:
flag8 = false;
goto _L37
_L20:
flag8 = true;
goto _L37
_L21:
flag8 = false;
IOException ioexception;
try
{
soundparameters = new SoundParameters();
AndroidPcmAudioDeviceFactory androidpcmaudiodevicefactory = new AndroidPcmAudioDeviceFactory();
soundparameters.mPcmAudioDeviceFactory = androidpcmaudiodevicefactory;
SharedPreferences sharedpreferences6 = sharedpreferences;
String s23 = "pref_sound_quality_key";
int l4 = 1;
int i5 = Utility.readIntPreference(sharedpreferences6, s23, l4);
soundparameters.mSoundQuality = i5;
SharedPreferences sharedpreferences7 = sharedpreferences;
String s24 = "pref_mono_stereo_key";
int j5 = 0;
int k5 = Utility.readIntPreference(sharedpreferences7, s24, j5);
soundparameters.mMonoStereoSound = k5;
}
// Misplaced declaration of an exception variable
catch(GeneralSecurityException generalsecurityexception)
{
rdpclientengine9 = null;
mRdpClientEngine = rdpclientengine9;
aobj = new Object[1];
s20 = generalsecurityexception.getMessage();
aobj[0] = s20;
sessionactivity11 = this;
j4 = 0x7f080033;
aobj1 = aobj;
s21 = sessionactivity11.getString(j4, aobj1);
sessionactivity12 = this;
k4 = 0x7f080031;
s22 = s21;
sessionactivity12.showErrorMessageDialog(k4, s22);
return;
}
catch(OutOfMemoryError outofmemoryerror)
{
RdpClientEngine rdpclientengine10 = null;
mRdpClientEngine = rdpclientengine10;
showOutOfMemoryErrorDialog();
outofmemoryerror.printStackTrace();
return;
}
catch(Exception exception)
{
String s25 = exception.getMessage();
SessionActivity sessionactivity13 = this;
int l5 = 0x7f080031;
String s26 = s25;
sessionactivity13.showErrorMessageDialog(l5, s26);
exception.printStackTrace();
return;
}
goto _L37
_L23:
i1 = 0;
flag9 = false;
goto _L38
_L24:
i1 = 1;
flag9 = false;
goto _L38
ioexception;
ioexception.printStackTrace();
goto _L28
GeneralSecurityException generalsecurityexception1;
generalsecurityexception1;
generalsecurityexception1.printStackTrace();
goto _L28
_L26:
s8 = mServer.mPassword;
goto _L28
_L31:
mVerticalScrollBarView.setVisibility(0);
goto _L39
_L33:
mHorizontalScrollBarView.setVisibility(0);
goto _L40
}
...全文
162 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
【原书名】 C++ Primer (4th Edition) 【原出版社】 Addison Wesley/Pearson 【作者】 (美)Stanley B.Lippman,Josée LaJoie,Barbara E.Moo 【译者】 李师贤 蒋爱军 梅晓勇 林瑛 【丛书名】 图灵计算机科学丛书 【出版社】 人民邮电出版社 【书号】 7-115-14554-7 【开本】 16开 【页码】 900 【出版日期】 2006-3-1 【版次】 4-1 【内容简介】 本书是久负盛名的C++经典教程,其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,已经帮助全球无数程序员学会了C++。本版对前一版进行了彻底的修订,内容经过了重新组织,更加入了C++ 先驱Barbara E. Moo在C++教学方面的真知灼见。既显著改善了可读性,又充分体现了C++语言的最新进展和当前的业界最佳实践。书中不但新增大量教学辅助内容,用于强调重要的知识点,提醒常见的错误,推荐优秀的编程实践,给出使用提示,还包含大量来自实战的示例和习题。对C++基本概念和技术全面而且权威的阐述,对现代C++编程风格的强调,使本书成为C++初学者的最佳指南;对于中高级程序员,本书也是不可或缺的参考书。本书的前言阐述了 第4版和前一版的不同之处。 【目录信息】 第1章 快速入门 1 1.1 编写简单的C++程序 2 1.2 初窥输入/输出 5 1.2.1 标准输入与输出对象 5 1.2.2 一个使用IO库的程序 5 1.3 关于注释 8 1.4 控制结构 10 1.4.1 while语句 10 1.4.2 for语句 12 1.4.3 if语句 14 1.4.4 读入未知数目的输入 15 1.5 类的简介 17 1.5.1 Sales_item类 17 1.5.2 初窥成员函数 19 1.6 C++程序 21 小结 22 术语 22 第一部分 基本语言 第2章 变量和基本类型 29 2.1 基本内置类型 30 2.1.1 整型 30 2.1.2 浮点型 32 2.2 字面值常量 34 2.3 变量 38 2.3.1 什么是变量 39 2.3.2 变量名 40 2.3.3 定义对象 42 2.3.4 变量初始化规则 44 2.3.5 声明和定义 45 2.3.6 名字的作用域 46 2.3.7 在变量使用处定义变量 48 2.4 const限定符 49 2.5 引用 50 2.6 typedef名字 53 2.7 枚举 53 2.8 类类型 54 2.9 编写自己的头文件 57 2.9.1 设计自己的头文件 58 2.9.2 预处理器的简单介绍 60 小结 62 术语 62 第3章 标准库类型 67 3.1 命名空间的using声明 68 3.2 标准库string类型 70 3.2.1 string对象的定义和初始化 70 3.2.2 String对象的读写 71 3.2.3 string对象的操作 72 3.2.4 string对象中字符的处理 76 3.3 标准库vector类型 78 3.3.1 vector对象的定义和初始化 79 3.3.2 vector对象的操作 81 3.4 迭代器简介 83 3.5 标准库bitset类型 88 3.5.1 bitset对象的定义和初始化 88 3.5.2 bitset对象上的操作 90 小结 92 术语 92 第4章 数组和指针 95 4.1 数组 96 4.1.1 数组的定义和初始化 96 4.1.2 数组操作 99 4.2 指针的引入 100 4.2.1 什么是指针 100 4.2.2 指针的定义和初始化 101 4.2.3 指针操作 104 4.2.4 使用指针访问数组元素 106 4.2.5 指针和const限定符 110 4.3 C风格字符串 113 4.3.1 创建动态数组 117 4.3.2 新旧代码的兼容 120 4.4 多维数组 122 小结 124 术语 125 第5章 表达式 127 5.1 算术操作符 129 5.2 关系操作符和逻辑操作符 131 5.3 位操作符 134 5.3.1 bitset对象或整型值的使用 135 5.3.2 将移位操作符用于IO 137 5.4 赋值操作符 137 5.4.1 赋值操作的右结合性 138 5.4.2 赋值操作具有低优先级 138 5.4.3 复合赋值操作符 139 5.5 自增和自减操作符 140 5.6 箭头操作符 142 5.7 条件操作符 143 5.8 sizeof操作符 144 5.9 逗号操作符 145 5.10 复合表达式的求值 145 5.10.1 优先级 145 5.10.2 结合性 146 5.10.3 求值顺序 148 5.11 new和delete表达式 150 5.12 类型转换 154 5.12.1 何时发生隐式类型转换 154 5.12.2 算术转换 155 5.12.3 其他隐式转换 156 5.12.4 显式转换 158 5.12.5 何时需要强制类型转换 158 5.12.6 命名的强制类型转换 158 5.12.7 旧式强制类型转换 160 小结 161 术语 162 第6章 语句 165 6.1 简单语句 166 6.2 声明语句 167 6.3 复合语句(块) 167 6.4 语句作用域 168 6.5 if语句 169 6.6 switch语句 172 6.6.1 使用switch 173 6.6.2 switch中的控制流 173 6.6.3 default标号 175 6.6.4 switch表达式与case标号 176 6.6.5 switch内部的变量定义 176 6.7 while语句 177 6.8 for循环语句 179 6.8.1 省略for语句头的某些部分 180 6.8.2 for语句头中的多个定义 181 6.9 do while语句 182 6.10 break语句 183 6.11 continue语句 184 6.12 goto语句 185 6.13 try块和异常处理 186 6.13.1 throw表达式 186 6.13.2 try块 187 6.13.3 标准异常 189 6.14 使用预处理器进行调试 190 小结 192 术语 192 第7章 函数 195 7.1 函数的定义 196 7.1.1 函数返回类型 197 7.1.2 函数形参表 198 7.2 参数传递 199 7.2.1 非引用形参 199 7.2.2 引用形参 201 7.2.3 vector和其他容器类型的形参 206 7.2.4 数组形参 206 7.2.5 传递给函数的数组的处理 209 7.2.6 main:处理命令行选项 210 7.2.7 含有可变形参的函数 211 7.3 return语句 211 7.3.1 没有返回值的函数 212 7.3.2 具有返回值的函数 212 7.3.3 递归 216 7.4 函数声明 217 7.5 局部对象 220 7.5.1 自动对象 220 7.5.2 静态局部对象 220 7.6 内联函数 221 7.7 类的成员函数 222 7.7.1 定义成员函数的函数体 223 7.7.2 在类外定义成员函数 225 7.7.3 编写Sales_item类的构造 函数 225 7.7.4 类代码文件的组织 227 7.8 重载函数 228 7.8.1 重载与作用域 230 7.8.2 函数匹配与实参转换 231 7.8.3 重载确定的三个步骤 232 7.8.4 实参类型转换 234 7.9 指向函数的指针 237 小结 239 术语 240 第8章 标准IO库 243 8.1 面向对象的标准库 244 8.2 条件状态 247 8.3 输出缓冲区的管理 249 8.4 文件的输入和输出 251 8.4.1 文件流对象的使用 251 8.4.2 文件模式 254 8.4.3 一个打开并检查输入文件的 程序 256 8.5 字符串流 257 小结 259 术语 259 第二部分 容器和算法 第9章 顺序容器 263 9.1 顺序容器的定义 264 9.1.1 容器元素的初始化 265 9.1.2 容器内元素的类型约束 267 9.2 迭代器和迭代器范围 268 9.2.1 迭代器范围 270 9.2.2 使迭代器失效的容器操作 271 9.3 顺序容器的操作 272 9.3.1 容器定义的类型别名 272 9.3.2 begin和end成员 273 9.3.3 在顺序容器中添加元素 273 9.3.4 关系操作符 277 9.3.5 容器大小的操作 278 9.3.6 访问元素 279 9.3.7 删除元素 280 9.3.8 赋值与swap 282 9.4 vector容器的自增长 284 9.5 容器的选用 287 9.6 再谈string类型 289 9.6.1 构造string对象的其他方法 290 9.6.2 修改string对象的其他方法 292 9.6.3 只适用于string类型的操作 293 9.6.4 string类型的查找操作 295 9.6.5 string对象的比较 298 9.7 容器适配器 300 9.7.1 栈适配器 301 9.7.2 队列和优先级队列 302 小结 303 术语 303 第10章 关联容器 305 10.1 引言:pair类型 306 10.2 关联容器 308 10.3 map类型 309 10.3.1 map对象的定义 309 10.3.2 map定义的类型 310 10.3.3 给map添加元素 311 10.3.4 使用下标访问map对象 311 10.3.5 map::insert的使用 313 10.3.6 查找并读取map中的元素 315 10.3.7 从map对象中删除元素 316 10.3.8 map对象的迭代遍历 316 10.3.9 “单词转换”map对象 317 10.4 set类型 319 10.4.1 set容器的定义和使用 319 10.4.2 创建“单词排除”集 321 10.5 multimap和multiset类型 322 10.5.1 元素的添加和删除 322 10.5.2 在multimap和multiset 中查找元素 323 10.6 容器的综合应用:文本查询程序 325 10.6.1 查询程序的设计 326 10.6.2 TextQuery类 327 10.6.3 TextQuery类的使用 328 10.6.4 编写成员函数 330 小结 332 术语 332 第11章 泛型算法 335 11.1 概述 336 11.2 初窥算法 339 11.2.1 只读算法 339 11.2.2 写容器元素的算法 341 11.2.3 对容器元素重新排序的算法 343 11.3 再谈迭代器 347 11.3.1 插入迭代器 348 11.3.2 iostream迭代器 349 11.3.3 反向迭代器 353 11.3.4 const迭代器 355 11.3.5 五种迭代器 356 11.4 泛型算法的结构 358 11.4.1 算法的形参模式 359 11.4.2 算法的命名规范 359 11.5 容器特有的算法 361 小结 362 术语 363 第三部分 类和数据抽象 第12章 类 367 12.1 类的定义和声明 368 12.1.1 类定义:扼要重述 368 12.1.2 数据抽象和封装 369 12.1.3 关于类定义的更多内容 372 12.1.4 类声明与类定义 374 12.1.5 类对象 375 12.2 隐含的this指针 376 12.3 类作用域 380 类作用域中的名字查找 382 12.4 构造函数 385 12.4.1 构造函数初始化式 387 12.4.2 默认实参与构造函数 391 12.4.3 默认构造函数 392 12.4.4 隐式类类型转换 393 12.4.5 类成员的显式初始化 396 12.5 友元 396 12.6 static类成员 398 12.6.1 static成员函数 400 12.6.2 static数据成员 400 小结 403 术语 403 第13章 复制控制 405 13.1 复制构造函数 406 13.1.1 合成的复制构造函数 409 13.1.2 定义自己的复制构造函数 409 13.1.3 禁止复制 410 13.2 赋值操作符 411 13.3 析构函数 412 13.4 消息处理示例 415 13.5 管理指针成员 419 13.5.1 定义智能指针类 421 13.5.2 定义值型类 425 小结 427 术语 427 第14章 重载操作符与转换 429 14.1 重载操作符的定义 430 14.2 输入和输出操作符 435 14.2.1 输出操作符<>的重载 437 14.3 算术操作符和关系操作符 439 14.3.1 相等操作符 440 14.3.2 关系操作符 441 14.4 赋值操作符 441 14.5 下标操作符 442 14.6 成员访问操作符 443 14.7 自增操作符和自减操作符 446 14.8 调用操作符和函数对象 449 14.8.1 将函数对象用于标准库算法 450 14.8.2 标准库定义的函数对象 451 14.8.3 函数对象的函数适配器 453 14.9 转换与类类型 454 14.9.1 转换为什么有用 454 14.9.2 转换操作符 455 14.9.3 实参匹配和转换 458 14.9.4 重载确定和类的实参 461 14.9.5 重载、转换和操作符 464 小结 466 术语 467 第四部分 面向对象编程与泛型编程 第15章 面向对象编程 471 15.1 面向对象编程:概述 472 15.2 定义基类和派生类 473 15.2.1 定义基类 474 15.2.2 protected成员 475 15.2.3 派生类 476 15.2.4 virtual与其他成员函数 479 15.2.5 公用、私有和受保护的继承 482 15.2.6 友元关系与继承 486 15.2.7 继承与静态成员 486 15.3 转换与继承 487 15.3.1 派生类到基类的转换 487 15.3.2 基类到派生类的转换 489 15.4 构造函数和复制控制 490 15.4.1 基类构造函数和复制控制 490 15.4.2 派生类构造函数 490 15.4.3 复制控制和继承 494 15.4.4 虚析构函数 495 15.4.5 构造函数和析构函数中的虚函数 497 15.5 继承情况下的类作用域 497 15.5.1 名字查找在编译时发生 498 15.5.2 名字冲突与继承 498 15.5.3 作用域与成员函数 499 15.5.4 虚函数与作用域 500 15.6 纯虚函数 502 15.7 容器与继承 503 15.8 句柄类与继承 504 15.8.1 指针型句柄 505 15.8.2 复制未知类型 507 15.8.3 句柄的使用 508 15.9 再谈文本查询示例 511 15.9.1 面向对象的解决方案 513 15.9.2 值型句柄 514 15.9.3 Query_base类 515 15.9.4 Query句柄类 516 15.9.5 派生类 518 15.9.6 eval函数 520 小结 522 术语 523 第16章 模板与泛型编程 525 16.1 模板定义 526 16.1.1 定义函数模板 526 16.1.2 定义类模板 528 16.1.3 模板形参 529 16.1.4 模板类型形参 531 16.1.5 非类型模板形参 533 16.1.6 编写泛型程序 534 16.2 实例化 535 16.2.1 模板实参推断 537 16.2.2 函数模板的显式实参 540 16.3 模板编译模型 542 16.4 类模板成员 545 16.4.1 类模板成员函数 548 16.4.2 非类型形参的模板实参 551 16.4.3 类模板中的友元声明 552 16.4.4 Queue和QueueItem的友元 声明 554 16.4.5 成员模板 556 16.4.6 完整的Queue类 558 16.4.7 类模板的static成员 559 16.5 一个泛型句柄类 560 16.5.1 定义句柄类 561 16.5.2 使用句柄 562 16.6 模板特化 564 16.6.1 函数模板的特化 565 16.6.2 类模板的特化 567 16.6.3 特化成员而不特化类 569 16.6.4 类模板的部分特化 570 16.7 重载与函数模板 570 小结 573 术语 574 第五部分 高级主题 第17章 用于大型程序的工具 579 17.1 异常处理 580 17.1.1 抛出类类型的异常 581 17.1.2 栈展开 582 17.1.3 捕获异常 583 17.1.4 重新抛出 585 17.1.5 捕获所有异常的处理代码 586 17.1.6 函数测试块与构造函数 586 17.1.7 异常类层次 587 17.1.8 自动资源释放 589 17.1.9 auto_ptr类 591 17.1.10 异常说明 595 17.1.11 函数指针的异常说明 598 17.2 命名空间 599 17.2.1 命名空间的定义 599 17.2.2 嵌套命名空间 603 17.2.3 未命名的命名空间 604 17.2.4 命名空间成员的使用 606 17.2.5 类、命名空间和作用域 609 17.2.6 重载与命名空间 612 17.2.7 命名空间与模板 614 17.3 多重继承与虚继承 614 17.3.1 多重继承 615 17.3.2 转换与多个基类 617 17.3.3 多重继承派生类的复制控制 619 17.3.4 多重继承下的类作用域 620 17.3.5 虚继承 622 17.3.6 虚基类的声明 624 17.3.7 特殊的初始化语义 625 小结 628 术语 628 第18章 特殊工具与技术 631 18.1 优化内存分配 632 18.1.1 C++中的内存分配 632 18.1.2 allocator类 633 18.1.3 operator new函数和 operator delete函数 636 18.1.4 定位new表达式 638 18.1.5 显式析构函数的调用 639 18.1.6 类特定的new和delete 639 18.1.7 一个内存分配器基类 641 18.2 运行时类型识别 646 18.2.1 dynamic_cast操作符 647 18.2.2 typeid操作符 649 18.2.3 RTTI的使用 650 18.2.4 type_info类 652 18.3 类成员的指针 653 18.3.1 声明成员指针 653 18.3.2 使用类成员的指针 655 18.4 嵌套类 658 18.4.1 嵌套类的实现 658 18.4.2 嵌套类作用域中的名字查找 661 18.5 联合:节省空间的类 662 18.6 局部类 665 18.7 固有的不可移植的特征 666 18.7.1 位域 666 18.7.2 volatile限定符 668 18.7.3 链接指示:extern "C" 669 小结 672 术语 673 附录 标准库 675 索引 703
C语言教程 C语言概述 7 C语言的发展过程 7 当代最优秀的程序设计语言 7 C语言版本 7 C语言的特点 7 面向对象的程序设计语言 8 C和C++ 8 简单的C程序介绍 8 输入和输出函数 9 C源程序的结构特点 10 书写程序时应遵循的规则 10 C语言的字符集 11 C语言词汇 11 Turbo C 2.0集成开发环境的使用 12 Turbo C 2.0简介和启动 12 Turbo C 2.0集成开发环境 13 File菜单 13 Edit菜单 14 Run菜单 15  Compile菜单 16 Project菜单 18 Options菜单 19 Debug菜单 23 Break/watch菜单 24 Turbo C 2.0的配置文件 24 程序的灵魂—算法 26 算法的概念 26 简单算法举例 26 算法的特性 29 怎样表示一个算法 29 用自然语言表示算法 29 用流程图表示算法 29 三种基本结构和改进的流程图 33 用N-S流程图表示算法 34 用伪代码表示算法 35 用计算机语言表示算法 35 结构化程序设计方法 36 数据类型、运算符与表达式 37 C语言的数据类型 37 常量与变量 39 常量和符号常量 39 变量 40 整型数据 40 整型常量的表示方法 40 整型变量 41 实型数据 44 实型常量的表示方法 44 实型变量 45 实型常数的类型 46 字符型数据 46 字符常量 46 转义字符 46 字符变量 47 字符数据在内存中的存储形式及使用方法 47 字符串常量 48 变量赋初值 48 各类数值型数据之间的混合运算 49 算术运算符和算术表达式 51 C运算符简介 51 算术运算符和算术表达式 51 赋值运算符和赋值表达式 53 逗号运算符和逗号表达式 55 小结 55 C的数据类型 55 基本类型的分类及特点 55 常量后缀 56 常量类型 56 数据类型转换 56 运算符优先级和结合性 56 表达式 56 最简单的C程序设计—顺序程序设计 57 C语句概述 57 赋值语句 58 数据输入输出的概念及在C语言中的实现 59 字符数据的输入输出 60 putchar 函数(字符输出函数) 60 getchar函数(键盘输入函数) 60 格式输入与输出 61 printf函数(格式输出函数) 61 scanf函数(格式输入函数) 63 顺序结构程序设计举例 67 分支结构程序 69 关系运算符和表达式 69 关系运算符及其优先次序 69 关系表达式 69 逻辑运算符和表达式 70 逻辑运算符极其优先次序 70 逻辑运算的值 70 逻辑表达式 71 if语句 71 if语句的三种形式 71 if语句的嵌套 75 条件运算符和条件表达式 77 switch语句 77 程序举例 79 循环控制 81 概述 81 goto语句以及用goto语句构成循环 81 while语句 81 do-while语句 83 for语句 86 循环的嵌套 88 几种循环的比较 88 break和continue语句 88 break语句 88 continue 语句 89 程序举例 90 数组 94 一维数组的定义和引用 94 一维数组的定义方式 94 一维数组元素的引用 95 一维数组的初始化 96 一维数组程序举例 97 二维数组的定义和引用 98 二维数组的定义 98 二维数组元素的引用 98 二维数组的初始化 99 二维数组程序举例 101 字符数组 101 字符数组的定义 101 字符数组的初始化 101 字符数组的引用 101 字符串和字符串结束标志 102 字符数组的输入输出 102 字符串处理函数 104 程序举例 106 本章小结 109 函 数 109 概述 110 函数定义的一般形式 111 函数的参数和函数的值 112 形式参数和实际参数 113 函数的返回值 114 函数的调用 114 函数调用的一般形式 114 函数调用的方式 115 被调用函数的声明和函数原型 115 函数的嵌套调用 116 函数的递归调用 118 数组作为函数参数 121 局部变量和全局变量 125 局部变量 125 全局变量 127 变量的存储类别 128 动态存储方式与静态动态存储方式 128 auto变量 129 用static声明局部变量 129 register变量 130 用extern声明外部变量 131 预处理命令 131 概述 132 宏定义 132 无参宏定义 132 带参宏定义 135 文件包含 138 条件编译 139 本章小结 141 指针 141 地址指针的基本概念 142 变量的指针和指向变量的指针变量 142 定义一个指针变量 143 指针变量的引用 143 指针变量作为函数参数 147 指针变量几个问题的进一步说明 150 数组指针和指向数组的指针变量 153 指向数组元素的指针 153 通过指针引用数组元素 154 数组名作函数参数 156 指向多维数组的指针和指针变量 162 字符串的指针指向字符串的针指变量 165 字符串的表示形式 165 使用字符串指针变量与字符数组的区别 168 函数指针变量 169 指针型函数 170 指针数组和指向指针的指针 171 指针数组的概念 171 指向指针的指针 174 main函数的参数 176 有关指针的数据类型和指针运算的小结 177 有关指针的数据类型的小结 177 指针运算的小结 177 void指针类型 178 共用体 178 定义一个结构的一般形式 179 结构类型变量的说明 179 结构变量成员的表示方法 181 结构变量的赋值 181 结构变量的初始化 182 结构数组的定义 182 结构指针变量的说明和使用 185 指向结构变量的指针 185 指向结构数组的指针 186 结构指针变量作函数参数 187 动态存储分配 188 链表的概念 189 枚举类型 191 枚举类型的定义和枚举变量的说明 191 枚举类型变量的赋值和使用 192 类型定义符typedef 193 位运算 195 位运算符C语言提供了六种位运算符: 195 按位与运算 195 按位或运算 195 按位异或运算 196 求反运算 196 左移运算 196 右移运算 196 位域(位段) 197 本章小结 199 文件 199 C文件概述 200 文件指针 200 文件的打开与关闭 201 文件的打开(fopen函数) 201 文件关闭函数(fclose函数) 202 文件的读写 202 字符读写函数fgetc和fputc 202 字符串读写函数fgets和fputs 206 数据块读写函数fread和fwtrite 207 格式化读写函数fscanf和fprintf 209 文件的随机读写 210 文件定位 210 文件的随机读写 211 文件检测函数 211 文件结束检测函数feof函数 212 读写文件出错检测函数 212 文件出错标志和文件结束标志置0函数 212 C库文件 212 本章小结 213
译者序 作者简介 技术审校人员简介 第1章 前言 1.1 本书的内容 1.2 本书的组织方式 1.3 致谢 第1部分 Objective-C语言 第2章 Objective-C程序设计 2.1 编译并运行程序 2.1.1 使用Xcode 2.1.2 使用Terminal 2.2 解释第一个程序 2.3 显示变量的值 2.4 小结 2.5 练习 第3章 类、对象和方法 3.1 到底什么是对象 3.2 实例和方法 3.3 用于处理分数的Objective-C类 3.4 @interface部分 3.4.1 选择名称 3.4.2 实例变量 3.4.3 类和实例方法 3.5 @implementation部分 3.6 Program部分 3.7 实例变量的访问以及数据封装 3.8 小结 3.9 练习 第4章 数据类型和表达式 4.1 数据类型和常量 4.1.1 int类型 4.1.2 float类型 4.1.3 double类型 4.1.4 char类型 4.1.5 限定词:long、long long、short、unsigned及signed 4.1.6 id类型 4.2 算术表达式 4.2.1 运算符的优先级 4.2.2 整数运算和一元负号运算符 4.2.3 模运算符 4.2.4 整型值和浮点值的相互转换 4.2.5 类型转换运算符 4.3 赋值运算符 4.4 计算器类 4.5 位运算符 4.5.1 按位与运算符 4.5.2 按位或运算符 4.5.3 按位异或运算符 4.5.4 一次求反运算符 4.5.5 向左移位运算符 4.5.6 向右移位运算符 4.6 类型:_Bool、_Complex和_Imaginary 4.7 练习 第5章 循环结构 5.1 for语句 5.1.1 键盘输入 5.1.2 嵌套的for循环 5.1.3 for循环的变形 5.2 while语句 5.3 do语句 5.4 break语句 5.5 continue语句 5.6 小结 5.7 练习 第6章 选择结构 6.1 if语句 6.1.1 if-else结构 6.1.2 复合条件测试 6.1.3 嵌套的if语句 6.1.4 else if结构 6.2 switch语句 6.3 Boolean变量 6.4 条件运算符 6.5 练习 第7章 类 7.1 分离接口和实现文件 7.2 合成存取器方法 7.3 使用点运算符访问属性 7.4 具有多个参数的方法 7.4.1 不带参数名的方法 7.4.2 关于分数的操作 7.5 局部变量 7.5.1 方法的参数 7.5.2 static关键字 7.6 self关键字 7.7 在方法中分配和返回对象 7.8 练习.. 第8章 继承 8.1 一切从根类开始 8.2 通过继承扩展—添加新方法 8.2.1 Point类和内存分配 8.2.2 @class指令 8.2.3 具有对象的类 8.3 重载方法 8.3.1 择哪个方法 8.3.2 重载dealloc方法和关键字super 8.4 通过继承扩展:添加新的实例变量 8.5 抽象类 8.6 练习 第9章 多态、动态类型和动态绑定 9.1 多态:相同的名称,不同的类 9.2 动态绑定和id类型 9.3 编译时和运行时检查 9.4 id数据类型与静态类型 9.5 有关类的问题 9.6 使用@try处理异常 9.7 练习 第10章 变量和数据类型 10.1 类的初始化 10.2 作用域回顾 10.2.1 控制实例变量作用域的指令 10.2.2 外部变量 10.2.3 静态变量 10.3 存储类说明符 10.3.1 auto 10.3.2 const 10.3.3 volatile 10.4 枚举数据类型 10.5 typedef语句 10.6 数据类型转换 10.6.1 转换规则 10.6.2 符号扩展 10.7 练习 第11章 分类和协议 11.1 分类 11.2 协议 11.3 合成对象 11.4 练习 第12章 预处理程序 12.1 #define语句 12.1.1 更高级的定义类型 12.1.2 #运算符 12.1.3 ##运算符 12.2 #import语句 12.3 条件编译 12.3.1 #ifdef、#endif、#else和#ifndef语句 12.3.2 #if和#elif预处理程序语句 12.3.3 #undef语句 12.4 练习 第13章 基本的C语言特性 13.1 数组 13.1.1 数组元素的初始化 13.1.2 字符数组 13.1.3 多维数组 13.2 函数 13.2.1 参数和局部变量 13.2.2 函数的返回结果 13.2.3 函数、方法和数组 13.3 结构 13.3.1 结构的初始化 13.3.2 结构数组 13.3.3 结构中的结构 13.3.4 关于结构的补充细节 13.3.5 不要忘记面向对象编程思想 13.4 指针 13.4.1 指针和结构 13.4.2 指针、方法和函数 13.4.3 指针和数组 13.4.4 指针运算 13.4.5 指针和内存地址 13.5 联合 13.6 它们不是对象 13.7 其他语言特性 13.7.1 Compound Literal 13.7.2 goto语句 13.7.3 空语句 13.7.4 逗号运算符 13.7.5 sizeof运算符 13.7.6 命令行参数 13.8 工作原理 事实#1:实例变量存储在结构中 事实#2:对象变量实际上是指针 事实#3:方法是函数,而消息表达式是 函数调用 事实#4:id类型是通用指针类型 13.9 练习 第二部分 Foundation框架 第14章 Foundation框架简介 第15章 数字、字符串和集合 15.1 数字对象 15.2 字符串对象 15.2.1 NSLog函数 15.2.2 可变对象与不可变对象 15.2.3 可变字符串 15.2.4 所有对象到哪里去了 15.3 数组对象 15.4 同步AddressCard方法 15.4.1 快速枚举 15.4.2 数组排序 15.5 词典对象 15.6 集合对象 15.7 练习 第16章 使用文件 16.1 管理文件和目录:NSFileManager 16.1.1 使用NSData类 16.1.2 使用目录 16.1.3 枚举目录中的内容 16.2 使用路径:NSPathUtilities.h 16.2.1 常用的路径处理方法 16.2.2 复制文件和使用NSProcessInfo类 16.3 基本的文件操作:NSFileHandle 16.4 练习 第17章 内存管理 17.1 自动释放池 17.2 引用计数 17.2.1 引用计数和字符串 17.2.2 引用计数与实例变量 17.3 自动释放池示例 17.4 内存管理规则摘要 17.5 垃圾回收 17.6 练习 第18章 复制对象 18.1 copy和mutableCopy方法 18.2 浅复制与深复制 18.3 实现协议 18.4 用赋值方法和取值方法复制对象 18.5 练习 第19章 归档 19.1 使用XML属性列表进行归档 19.2 使用NSKeyedArchiver归档 19.3 编码方法和解码方法 19.4 使用NSData创建自定义档案 19.5 使用归档程序复制对象 19.6 练习 第三部分 Cocoa和iPhone SDK 第20章 Cocoa简介 20.1 框架层 20.2 接触Cocoa 第21章 编写iPhone应用程序 21.1 iPhone SDK 21.2 第一个iPhone应用程序 21.2.1 创建新的iPhone应用程序项目 21.2.2 输入代码 21.2.3 设计界面 21.3 iPhone分数计算器 21.3.1 启动新的Fraction_Calculator项目 21.3.2 定义视图控制器 21.3.3 Fraction类 21.3.4 处理分数的Calculator类 21.3.5 设计UI 21.4 小结 21.5 练习 第四部分 附录 附录A 术语表 附录B Objective-C 2.0语言概览 附录C 地址簿源代码 附录D 资源
1 愉快的开始-HELLO WORLD 14 1.1 INCLUDE头文件包含 14 1.2 MAIN函数 14 1.3 注释 14 1.4 {}括号,程序题和代码块 14 1.5 声明 14 1.6 C语言自定义名字的要求 15 1.7 PRINTF函数 15 1.8 RETURN语句 15 1.9 SYSTEM系统调用 15 1.9.1 System返回值在windows和unix下的不同, 15 1.9.2 POSIX 15 1.10 C语言编译过程,GCC参数简介 16 1.10.1 C语言编译过程 16 1.10.2 -E预编译 16 1.10.3 -S汇编 16 1.10.4 -c编译 16 1.10.5 链接 16 1.11 操作系统结构 17 1.11.1 用户模式 17 1.11.2 内核模式 17 1.12 64位,32位系统区别 18 1.12.1 CPU内部结构与寄存器 18 1.12.2 RISC与CISC CPU构架 18 1.12.3 SPARC,x86与ARM 18 1.13 汇编语言 18 1.13.1 I386汇编简介 18 1.13.2 VS反汇编 19 1.14 IDE工具 19 1.14.1 QT常用快捷键 19 1.14.2 VS常用快捷键 19 1.14.3 VS断点,调试 19 2 C语言中的数据类型 19 2.1 常量 19 2.1.1 #define 19 2.1.2 const 19 2.2 字符串常量 20 2.3 二进制数、位、字节与字 20 2.4 八进制 20 2.5 十六进制 20 2.6 原码 21 2.7 反码 21 2.8 补码 21 2.9 SIZEOF关键字 22 2.10 INT类型 22 2.10.1 int常量,变量 22 2.10.2 printf输出int值 23 2.10.3 printf输出八进制和十六进制 23 2.10.4 short,long,long long,unsigned int 23 2.10.5 整数溢出 23 2.10.6 大端对齐与小端对齐 23 2.11 CHAR类型 24 2.11.1 char常量,变量 24 2.11.2 printf输出char 24 2.11.3 不可打印char转义符 24 2.11.4 char和unsigned char 25 2.12 浮点FLOAT,DOUBLE,LONG DOUBLE类型 25 2.12.1 浮点常量,变量 25 2.12.2 printf输出浮点数 25 2.13 类型限定 25 2.13.1 const 25 2.13.2 volatile 26 2.13.3 register 26 3 字符串格式化输出和输入 26 3.1 字符串在计算机内部的存储方式 26 3.2 PRINTF函数,PUTCHAR函数 27 3.3 SCANF函数与GETCHAR函数 28 4 运算符表达式和语句 29 4.1 基本运算符 29 4.1.1 = 29 4.1.2 + 29 4.1.3 – 29 4.1.4 * 29 4.1.5 / 29 4.1.6 % 29 4.1.7 += 29 4.1.8 -= 29 4.1.9 *= 29 4.1.10 /= 30 4.1.11 %= 30 4.1.12 ++ 30 4.1.13 -- 30 4.1.14 逗号运算符 30 4.1.15 运算符优先级 30 4.2 复合语句 31 4.3 空语句 31 4.4 类型转化 31 5 条件分支语句 31 5.1 关系运算符 31 5.1.1 < 31 5.1.2 <= 31 5.1.3 > 32 5.1.4 >= 32 5.1.5 == 32 5.1.6 != 32 5.2 关系运算符优先级 32 5.3 逻辑运算符 32 5.3.1 && 32 5.3.2 || 32 5.3.3 ! 33 5.4 IF 33 5.5 IF ELSE 34 5.6 IF ELSE IF 34 5.7 SWITCH与BREAK,DEFAULT 35 5.8 条件运算符? 36 5.9 GOTO语句与标号 36 6 循环语句 36 6.1 WHILE 36 6.2 CONTINUE 37 6.3 BREAK 37 6.4 DO WHILE 37 6.5 FOR 37 6.6 循环嵌套 37 7 数组 38 7.1 一维数组定义与使用 38 7.2 数组在内存的存储方式 38 7.3 一维数组初始化 38 7.4 二维数组定义与使用 39 7.5 二维数组初始化 39 8 字符串与字符数组 39 8.1 字符数组定义 39 8.2 字符数组初始化 39 8.3 字符数组使用 40 8.4 随机数产生函数RAND与SRAND 40 8.5 用SCANF输入字符串 40 8.6 字符串的结束标志 41 8.7 字符串处理函数 41 8.7.1 gets 41 8.7.2 fgets函数 41 8.7.3 puts函数 42 8.7.4 fputs函数 42 8.7.5 strlen,字符串长度 42 8.7.6 strcat,字符串追加 42 8.7.7 strncat,字符串有限追加 43 8.7.8 strcmp,字符串比较 43 8.7.9 strncmp,字符串有限比较 43 8.7.10 strcpy字符串拷贝 43 8.7.11 strncpy字符串有限拷贝 43 8.7.12 sprintf,格式化字符串 43 8.7.13 Sscanf函数 44 8.7.14 strchr查找字符 44 8.7.15 strstr查找子串 44 8.7.16 strtok分割字符串 44 8.7.17 atoi转化为int 45 8.7.18 atof转化为float 45 8.7.19 atol转化为long 45 9 函数 45 9.1 函数的原型和调用 45 9.2 函数的形参与实参 45 9.3 函数的返回类型与返回值 46 9.4 MAIN函数与EXIT函数与函数的RETURN语句 46 9.5 多个源代码文件程序的编译 47 9.5.1 头文件的使用 47 9.5.2 #include与#define的意义 47 9.5.3 #ifndef与#endif 47 9.6 函数的递归 48 9.6.1 递归的过程分析 48 9.6.2 递归的优点 52 9.6.3 递归的缺点 52 1 指针 52 1.1 指针 52 1.1.1 指针的概念 52 1.1.2 指针变量的定义 52 1.1.3 &取地址运算符 52 1.1.4 无类型指针 52 1.1.5 NULL 53 1.1.6 空指针与野指针 53 1.1.7 指针的兼容性 53 1.1.8 指向常量的指针与指针常量 54 1.1.9 指针与数组的关系 54 1.1.10 指针运算 54 1.1.11 通过指针使用数组元素 55 1.1.12 指针数组 55 1.1.13 指向指针的指针(二级指针) 55 1.1.14 指向二维数组的指针 57 1.1.15 指针变量做为函数的参数 57 1.1.16 一维数组名作为函数参数 57 1.1.17 二维数组名作为函数参数 58 1.1.18 const关键字保护数组内容 58 1.1.19 指针做为函数的返回值 58 1.1.20 指向函数的指针 59 1.1.21 把指向函数的指针做为函数的参数 60 1.1.22 memset,memcpy,memmove函数 61 1.1.23 指针小结 63 2 字符指针与字符串 64 2.1 指针和字符串 64 2.2 通过指针访问字符串数组 64 2.3 函数的参数为CHAR * 64 2.4 指针数组做为MAIN函数的形参 65 3 内存管理 65 3.1 作用域 65 3.1.1 auto自动变量 65 3.1.2 register寄存器变量 65 3.1.3 代码块作用域的静态变量 66 3.1.4 代码块作用域外的静态变量 66 3.1.5 全局变量 66 3.1.6 外部变量与extern关键字 66 3.1.7 全局函数和静态函数 66 3.2 内存四区 66 3.2.1 代码区 67 3.2.2 静态区 67 3.2.3 栈区 67 3.2.4 栈溢出 68 3.2.5 堆区 68 3.3 堆的分配和释放 70 3.3.1 malloc 70 3.3.2 free 70 3.3.3 calloc: 70 3.3.4 realloc 71 4 结构体,联合体,枚举与TYPEDEF 71 4.1 结构体 71 4.1.1 定义结构体struct和初始化 71 4.1.2 访问结构体成员 71 4.1.3 结构体的内存对齐模式 72 4.1.4 指定结构体元素的位字段 72 4.1.5 结构数组 72 4.1.6 嵌套结构 73 4.1.7 结构体的赋值 73 4.1.8 指向结构体的指针 73 4.1.9 指向结构体数组的指针 73 4.1.10 结构中的数组成员和指针成员 73 4.1.11 在堆中创建的结构体 74 4.1.12 将结构作为函数参数 74 4.1.13 结构,还是指向结构的指针 74 4.2 联合体 75 4.3 枚举类型 75 4.3.1 枚举定义 75 4.3.2 默认值 76 4.4 TYPEDEF 76 4.5 通过TYPEDEF定义函数指针 76 5 文件操作 77 5.1 FOPEN 77 5.2 二进制和文本模式的区别 77 5.3 FCLOSE 78 5.4 GETC和PUTC函数 78 5.5 EOF与FEOF函数文件结尾 78 5.6 FPRINTF,FSCANF,FGETS,FPUTS函数 78 5.7 STAT函数 78 5.8 FREAD和FWRITE函数 79 5.9 FREAD与FEOF 79 5.10 通过FWRITE将结构保存到二进制文件中 79 5.11 FSEEK函数 80 5.12 FTELL函数 80 5.13 FFLUSH函数 80 5.14 REMOVE函数 81 5.15 RENAME函数 81 6 基础数据结构与算法 82 6.1 什么是数据结构 82 6.2 什么是算法 82 6.3 排序 83 6.3.1 冒泡排序 83 6.3.2 选择排序 83 6.4 查找 83 6.4.1 顺序查找 83 6.4.2 二分查找 83 6.5 链表 84 6.5.1 单向链表定义 84 6.5.2 单向链表数据结构定义 85 6.5.3 单向链表的实现 85

80,360

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧