VC2015 社区版 C++ 初学者 平时程序运行报错 我要如何学习如何看这些报错?

新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
UID8234873空间积分0 积分184阅读权限10帖子精华可用积分184 信誉积分100 专家积分0 在线时间576 小时注册时间最后登录
白手起家, 积分 184, 距离下一级还需 16 积分
帖子主题精华可用积分184 信誉积分100 专家积分0 在线时间576 小时注册时间最后登录
论坛徽章:0
刚学C++ 第一次写关于类的程序& &运行的时候总是有显示这2个错误&&能帮我看看吗
--Configuration: Car1 - Win32 Debug--------------------
Linking...
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/Car1.exe : fatal error LNK1120: 1 unresolved externals
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
UID空间积分0 积分1594阅读权限100帖子精华可用积分1594 信誉积分145 专家积分0 在线时间530 小时注册时间最后登录
帖子主题精华可用积分1594 信誉积分145 专家积分0 在线时间530 小时注册时间最后登录
论坛徽章:0
win32代码,win32程序
没有别的提示了?
地振高冈,一派溪山千古秀;
门朝大海,三河合水万年流
UID空间积分0 积分46阅读权限10帖子精华可用积分46 信誉积分100 专家积分0 在线时间1 小时注册时间最后登录
白手起家, 积分 46, 距离下一级还需 154 积分
帖子主题精华可用积分46 信誉积分100 专家积分0 在线时间1 小时注册时间最后登录
论坛徽章:0
UID8234873空间积分0 积分184阅读权限10帖子精华可用积分184 信誉积分100 专家积分0 在线时间576 小时注册时间最后登录
白手起家, 积分 184, 距离下一级还需 16 积分
帖子主题精华可用积分184 信誉积分100 专家积分0 在线时间576 小时注册时间最后登录
论坛徽章:0
没有了啊 ,& &是main.cpp
UID空间积分0 积分1147阅读权限30帖子精华可用积分1147 信誉积分100 专家积分0 在线时间0 小时注册时间最后登录
家境小康, 积分 1147, 距离下一级还需 853 积分
帖子主题精华可用积分1147 信誉积分100 专家积分0 在线时间0 小时注册时间最后登录
论坛徽章:0
建立一个WIN32 控制台项目-CONSOLE,然后把代码添加进去。
UID空间积分0 积分122阅读权限10帖子精华可用积分122 信誉积分100 专家积分0 在线时间3 小时注册时间最后登录
白手起家, 积分 122, 距离下一级还需 78 积分
帖子主题精华可用积分122 信誉积分100 专家积分0 在线时间3 小时注册时间最后登录
论坛徽章:0
我想你是在VC++里编译的吧!找到工程设置,然后把console该为windows就好了
这个问题以前也让我苦恼一些时间,主要是我们以前学C++/C的时候写的是控制台程序,而现在你写的是windows程序
其实你也可以这样,打开文件的时候打开后缀为DSW的文件就行了 不会出现你说的链接错误!
UID8234873空间积分0 积分184阅读权限10帖子精华可用积分184 信誉积分100 专家积分0 在线时间576 小时注册时间最后登录
白手起家, 积分 184, 距离下一级还需 16 积分
帖子主题精华可用积分184 信誉积分100 专家积分0 在线时间576 小时注册时间最后登录
论坛徽章:0
先谢谢楼上2位!!但我连控制台也找不到,,能说的具体点吗 谢谢了
UID空间积分0 积分122阅读权限10帖子精华可用积分122 信誉积分100 专家积分0 在线时间3 小时注册时间最后登录
白手起家, 积分 122, 距离下一级还需 78 积分
帖子主题精华可用积分122 信誉积分100 专家积分0 在线时间3 小时注册时间最后登录
论坛徽章:0
我现在在网吧上呢!离了编译器我就傻了 闭上眼睛我就是什么也想不起来了
好像是这样子&&在菜单里找到“工程”&&然后“设置”&&接着在下面有一个表格样的东西,里面好多后缀什么的& & 你找到console&&将其改为windows就行了& &大概就是这样子&&
其实最简单的方法就是打开后缀为DSW的文件了
UID8234873空间积分0 积分184阅读权限10帖子精华可用积分184 信誉积分100 专家积分0 在线时间576 小时注册时间最后登录
白手起家, 积分 184, 距离下一级还需 16 积分
帖子主题精华可用积分184 信誉积分100 专家积分0 在线时间576 小时注册时间最后登录
论坛徽章:0
呵呵 谢谢哦&&加我QQ吧&&
UID空间积分0 积分1594阅读权限100帖子精华可用积分1594 信誉积分145 专家积分0 在线时间530 小时注册时间最后登录
帖子主题精华可用积分1594 信誉积分145 专家积分0 在线时间530 小时注册时间最后登录
论坛徽章:0
应该是这个
winmain在vc里应该是窗口的入口
就向C里的main一样
地振高冈,一派溪山千古秀;
门朝大海,三河合水万年流VC++6.0后输入正确程序不报错也不运行提示this file does not exist,Do you want build it_百度知道
VC++6.0后输入正确程序不报错也不运行提示this file does not exist,Do you want build it
com/zhidao/pic/item/e824b899aa063ca097b0c2; &nbsp如图 &nbsp://f.hiphotos.hiphotos.jpg" esrc="/zhidao/wh%3D450%2C600/sign=8d9e2d1cf8f2b211e47b8d4affb0490e/e824b899aa063ca097b0c2://f;都这样 &nbsp://f.baidu
请详细说明操作步骤
我已经没法做作业了
提问者采纳
a='4&#39,另外a=4是显示不出来的。woid应该为void,提示1。怎么能说没用报错呢,当然不生成可执行文件,程序有错误看下方“组建”哪里?程序中关键字拼写错误,可以改为
那是情急之下打错了 & 其实情况是 不管程序对错 &都是那样的 & 还有就是 &不管点是还是否 & 都运行不了
看下方“组建”哪里,提示1 error,有错误,当然不生成可执行文件。如果是win7、win8下使用,VC6有问题是很可能的,对新系统支持不好。win7的话,百度“win7 VC6 Error spawning cl.exe& 如果错误提示是这个,直接搜吧,按照步骤来,都可以解决。如果是win8,建议放弃VC6更换VS2013,或者安装虚拟机使用VC6,这个实在无法保障稳定使用,对初学者太痛苦了。
组件那里,向上滚动一下,可以看到具体错误原因。
没有具体错误了
这些基本的上机课上都会得
我的系统是WIN8.1
还有 用vs2013
我们学校机房的主要是用vc++6.0操作的
第三次提醒,“组建”那里,相关滚动,有具体错误信息。win8.1下折腾VC6,建议放弃。如果一定要用,可以使用VMWARE虚拟机安装。2013和VC6肯定是有很大区别的,界面区别就不小,但简单程序的调试没有什么区别。
第二次回答
组建那里上下滚动 没有具体错误了
不一样就算了
那就只能这样了,什么时候看到具体错误了,你就明白了。
一直有追问提示,奇怪。
提问者评价
其他类似问题
为您推荐:
build的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁哪位大神帮我看看这个问题到底出在哪,为什么程序运行不了_百度知道
哪位大神帮我看看这个问题到底出在哪,为什么程序运行不了
baidu://a.com/zhidao/wh%3D600%2C800/sign=1d624f5fe0ad9fe2bb12e/6a63ffc510fd9f9a11e.hiphotos&nbsp.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http.hiphotos.baidu://a.jpg" esrc="/zhidao/pic/item//zhidao/wh%3D450%2C600/sign=3fbfdfad839ceea81bfa062/6a63ffc510fd9f9a11e;<img class="ikqb_img" src="http.jpg" esrc="http.baidu.baidu.hiphotos<a href="http://h.com/zhidao/wh%3D600%2C800/sign=9eecd0806bacb990dc24c2/43a7d933c895dcaaf0746.hiphotos://h.com/zhidao/wh%3D450%2C600/sign=/zhidao/pic/item/43a7d933c895dcaaf0746.hiphotos://h
不客气,还有问题吗?如果没有,请采纳!谢谢!
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
其他类似问题
没见过编译都过了的,能调试么,你这是什么IDE啊?没看出啥问题
我这个是codeblack
程序是从书上抄的
应该不会有错
一直都是这样
程序编译过了就不会有语法错了,你在第一个printf那里打断点呢?如果main函数都没进来就退出了,那就肯定是运行环境有问题了。
难道Windows10不行吗
我没用过这东西,不知道它的环境是怎么的。 拿VC++来说,如果你装的是VC++2010,那编译出来的东西,必须要有VC++2010运行库才能运行。
来自团队:
为您推荐:
程序运行的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁【收藏】Scala 资源一应俱全
程序员七夕表白礼品指南
c++classobjectc2010
17360人阅读
C/C++(64)
先问一个问题,在C++里,成员函数里的this指针和调用此函数的对象地址总是一样的吗?如果你的回答是:不一定。那么至少你是个老手吧,下面的内容你就不用看了;如果你的回答是:是啊,那么强烈建议你看看下面的内容。&非静态成员函数,无论是不是虚函数,都隐藏了一个this指针参数。这个参数的目的就是给函数提供一个基地址,以便于函数体内能找到对象的成员变量。那非静态成员函数是如何根据this指针找到成员变量的呢?直接看例子吧&1没有虚表的情况#include &iostream&
#include &stdio.h&
this-&x = 1;
this-&y = 2;
cout&&&this指针得值是:&&&std::hex&&std::showbase&&this&&
int main(int argc, char** argv)
cout&&&a对象的地址是:&&&&a&&
cout&&&a对象的大小是:&&&sizeof(A)&&
cout&&&成员a.x的地址是: &&&&a.x&&
cout&&&成员a.x的偏移是:&&&&A::x&&
那么函数F1的实现伪代码为:&*(this+&A::x-1) = 1; *(this+&A::y-1) = 2;&其中&A::x是成员x的偏移+1,&A::y是成员y的偏移+1,这可是C++基本语法的知识,希望你知道,呵呵。可这些偏移量是相对应那里的偏移呢,是对象地址吗,答案是NO。是相对于第一个成员变量的偏移,这对于有些对象也许没有差别,但是对于有虚表的类的对象,就有差别了。这些偏移在编译期间就是确定了的。对于本例在VC++2010下&A::x,值为1, &A::y,值为5。为什么不是0,4,请看《Inside The C++ Object Model》。所以,对于找到成员变量,需要进一步确定的只有this的值。程序运行结果如下:可见此例中,对象的地址与this指针的地址相同,内存图如下所示。2有一个虚表的情况#include &iostream&
#include &stdio.h&
virtual void F1()
this-&x = 1;
this-&y = 2;
cout&&&this指针得值是:&&&std::hex&&std::showbase&&this&&
int main(int argc, char** argv)
A* p = new A();
cout&&&a对象的地址是:&&&p&&
cout&&&a对象的大小是:&&&sizeof(A)&&
cout&&&成员a.x的地址是: &&&&p-&x&&
cout&&&成员a.x的偏移是:&&&&A::x&&
&此时函数F1的实现伪代码为:&*(this+4+&A::x-1) = 1; &//+4是因为存在虚表指针*(this+4+&A::y-1) = 2; &//+4是因为存在虚表指针&程序运行结果如下:内存布局如下:结论:this的值和对象地址相同,成员变量偏移量不因虚表指针存在而改变。带虚表的类的成员函数对成员变量的寻址方式不同,增加一个+4。3单继承的情况#include &iostream&
#include &stdio.h&
this-&x = 1;
this-&y = 2;
cout&&&this指针得值是:&&&std::hex&&std::showbase&&this&&
class B : public A
virtual void F2()
cout&&&this指针得值是:&&&std::hex&&std::showbase&&this&&
int main(int argc, char** argv)
B* pb = new B();
cout&&&对象的地址为:&&&std::hex&&std::showbase&&pb&&
&运行结果:内存布局:结论:this指针的值受两个因素确定,一是对象的地址,二是定义成员函数的类。This指向的是对象内,定义该方法的类得subobject。4 多继承的情况先看A没有虚函数,B有虚函数的情况#include &iostream&
#include &stdio.h&
this-&x = 1;
this-&y = 2;
cout&&&this指针得值是:&&&std::hex&&std::showbase&&this&&
virtual void F2()
cout&&&this指针得值是:&&&std::hex&&std::showbase&&this&&
class C : public A, public B
virtual void F2()
cout&&&this指针得值是:&&&std::hex&&std::showbase&&this&&
cout&&&this指针得值是:&&&std::hex&&std::showbase&&this&&
int main(int argc, char** argv)
C* pc = new C();
cout&&&对象的大小为:&&&sizeof(C)&&
cout&&&对象的地址为:&&&std::hex&&std::showbase&&pc&&
结果:内存布局:再看,如果A,B都有虚函数的情况。代码:#include &iostream&
#include &stdio.h&
virtual void F1()
this-&x = 1;
this-&y = 2;
cout&&&this指针得值是:&&&std::hex&&std::showbase&&this&&
virtual void F2()
cout&&&this指针得值是:&&&std::hex&&std::showbase&&this&&
class C : public A, public B
virtual void F2()
cout&&&this指针得值是:&&&std::hex&&std::showbase&&this&&
cout&&&this指针得值是:&&&std::hex&&std::showbase&&this&&
int main(int argc, char** argv)
C* pc = new C();
cout&&&对象的大小为:&&&sizeof(C)&&
cout&&&对象的地址为:&&&std::hex&&std::showbase&&pc&&
cout&&&x的地址&&&&pc-&x&&
cout&&&z的地址&&&&pc-&z&&
pc-&B::F2();
结果:内存布局:结论:再一次验证了this指针的值的确定方法,this始终要保证指向定义了该成员函数的类得subobject。因为C++保证base class subobject与base class object完全对应,从而保证了成员函数能根据成员变量在定义了该变量的类中的偏移寻址。&&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1436067次
积分:16592
积分:16592
排名:第386名
原创:312篇
转载:105篇
译文:14篇
评论:329条
阅读:7993
(2)(1)(5)(3)(10)(4)(7)(3)(5)(1)(4)(1)(5)(3)(6)(10)(10)(8)(14)(1)(3)(7)(1)(3)(4)(7)(11)(4)(5)(4)(5)(1)(8)(6)(6)(3)(9)(6)(4)(6)(2)(4)(4)(7)(6)(3)(2)(1)(3)(6)(6)(12)(4)(5)(3)(5)(6)(8)(6)(4)(1)(3)(1)(2)(6)(1)(12)(2)(4)(3)(8)(2)(15)(6)(2)(5)(5)(4)(2)(1)(4)(4)(6)(2)(3)(1)(5)(1)(2)(4)(4)(5)(3)
友情链接:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&c++ 学习
一.获取时间&& 请问如何计算一个程序运行的时间? 用什么函数来获得当前时间?1.用difftime,秒级
#include &time.h&#include &stdio.h&#include &dos.h&
int main(void){&& time_t first,
&& first = time(NULL);& /* Gets system&& time */
& // 你的程序&&& ...............
&& second = time(NULL); /* Gets system time&&& again */
&& printf("The difference is: %f seconds/n",difftime(second,first));&& getch();
&& return 0;}
2.用DWORD GetTickCount(VOID)CTime WINAPI GetCurrentTime( ) throw( );获得更精确的时间 GetTickCount
3.获取系统编译程序的时间char* time1 = __DATE__;char* time2 = __TIME__;其中__DATE__和__TIME__是俩个宏。
二,IO算子
cout&&"Hello world!"&&flush&& ---强制输出&& cout&&&& cout&&&&&&&&&&& -----输出一个null字符&& cout&&setfill('*');&& -----和setw配合使用,将空白区用指定字符输出&& cout&&setw(14)&&"how"&&setw(14)&&"how"&&--set width&& double d = 33.11444;&& cout&&setprecision(4)&&d&&----设置小数点的位数&& cout&&dec&&10&&----一旦设定,后面的全部跟随。&&& cout&&hex&&10&&&& cout&&oct&&10&&&& setbase(n);----更改原来设置的进制。如更改为16进制,setbase(16);&&&& cin&&hex&&a;&& ----以hex输入&& cout&&dec&&a&&&&三、内存对齐问题(关键字,内存对齐)typedef struct{&int a[10];&char ch[10];&int f[10];&bool b[10];}MT
int _tmain(int argc, _TCHAR* argv[]){
&&&& MT&&&printf("%d",sizeof(MType));&getch();&return 0;}这个结构中,本来按我们计算sizeof(MType)是100,然而结果是104。在vc和linux下的dev c++都是。原因是内存对齐问题。一般编译器认为内存以4的倍数对齐。仔细分析内存可以得出结论,不够4,要向后移动,凑成4的倍数。这个机构的一个对象就涉及了向后移动2字节,补全2字节。故为104。
可以在文件最前面加#pragma pack(1) 这是将编译器该成为1的倍数对齐,这样求出的长度就为100了。
四。分位定义typedef unsigned char _uint_8;typedef struct{&char lo4:4,&//先定义的是低位,在内存中,高位在左, 低位在右。&&&&& hi4:4;}myBint main(){
&myB&void*&//mch.hig4 = 6;&//mch.low4 = 1;&p = &&//*((unsigned char*)p) = *((unsigned char*)p)&&4;&*(unsigned char*)(p) = 0xf1;&printf("%d /n", mch.hig4);&//-1 结果&printf("%d /n", mch.low4);&//1&&*(unsigned char*)(p) &&= 4;&&printf("%d /n", mch.hig4);&//0&printf("%d /n", mch.low4);&//-1&&&return 0;}表示将一个字节分成俩部分,前面2位,后面6位。使用:
&MyB&b.hi4 =& 10;&b.lo4 = 2;
&cout&&b.hi4&&&cout&&b.lo4&&注意:不能夸字节定义。必须定义在结构里方可使用。
五,关于new
new"分配"的内存当然都在堆中。但new并不仅仅只有分配内存的作用,它还可以在已有内存(包括栈内存)上强制重新构造对象的作用。
如:#include &iostream&
class A{public:&&&A(int _i , int _j) { i = _i; j = _j; }};
int main(){&A a(3, 4);&cout && a.i && a.j &&&new (&a) A(5,6);&cout && a.i && a.j &&
&return 0;}
六、关于n个随机数的和的问题求m个随机数之和为n的算法。
void myRan(int n,int m){&&int sum=0;&int *a = new int[m];&for (i=0; i&m; i++)&{&&a[i] = 0;&}&for(i=0; i&m-1; i++)&{&&a[i]=rand()%(n + 1-sum);&&sum+=a[i];&&cout&&a[i]&&'/t';&}&a[m-1]=n -&cout&&a[m-1]&&&delete []a;
}七,关于结构的定义和赋值typedef struct{&&&& short b[2];&&&&&&&&&&&&&&&&& /*定义第一个结构体*/&&&&&&&&&&&&&&&&&&& }Ex2;typedef struct Ex1{&&&&&& char b[3];&&& Ex2&&&&&&&&&&&&&&&&&&&& /*定义第二个结构体*/&Ex1 *}Ex1;我们看第二个结构,Ex1 必须写在括号的前面,否这编译不会通过,大概是不识别结构种的Ex1符号吧。而后一个Ex1可以写,也可以不写。如果结构种没有自身的指针,那么,机构的名字可以放在结构定义的末尾,也可以是结构体的开始。 另外,结构体种不能用结构自身定义成员,可以用结构的指针定义成员例如:typedef struct Ex1{&&&&&& char b[3];&&& Ex2&&&&&&&&&&&&&&&&&&&& /*定义第二个结构体*/&Ex1& //错误,可以用结构的指针,但是不能用结构自身定义对象。}Ex1;
结构体的赋值:对于上面的俩个结构:typedef struct{&&&& short b[2];&&&&&&&&&&&&&&&&& /*定义第一个结构体*/&&&&&&&&&&&&&&&&&&& }Ex2;typedef struct Ex1{&&&&&& char b[3];&&& Ex2&&&&&&&&&&&&&&&&&&&& /*定义第二个结构体*/&Ex1 *}Ex1;上面是c语言的定义方式,在C++中,可以省略掉typedef,比如:struct Ex1{&&&&&& char b[3];&&& Ex2&&&&&&&&&&&&&&&&&&&& /*定义第二个结构体*/&Ex1 *};这时,c++编译器可以识别出Ex1,并且可以直接用Ex1定义对象,不用再加strcut。比如:Ex1 e1;
所以关键看是什么编译器,我用g++ 编译后者没有错误。用gcc就出现了好多错误。可见后面的是c++支持的。在c++编程思想上有说明。Ch2,P12可以这样赋值。&Ex2 e2 = {10,{10,10}};&Ex1 e1={10,"Hi",{5,{25,25}},0};&八,关于内存问题:从总体上程序的内存空间可分为代码区和数据区。从C++的角度来看数据区又可作如下划分:1.自动存储区(栈):自动(局部)变量、寄存器变量(声明的寄存器变量可能在寄存器中,也可能在一般内存中。在逻辑上寄存器属于自动存储区。)、临时对象以及函数参数。2.静态存储区:全局对象、函数中的静态变量、类中的静态数据成员、常量字符串以及namespace 变量(比如 namespace abc =中的 abc。)3. 自由存储区(堆):也称为动态内存。
一个可执行文件、.o、.a文件中系统规定的段有这么多* .bss该sectiopn保存着未初始化的数据,这些数据存在于程序内存映象中。通过定义,当程序开始运行,系统初始化那些数据为0。该section不占文件空间,正如它的section类型SHT_NOBITS指示的一样。* .comment该section保存着版本控制信息。* .data and .data1这些sections保存着初始化了的数据,那些数据存在于程序内存映象中。* .debug该section保存着为标号调试的信息。该内容是未指明的。* .dynamic该section保存着动态连接的信息。该section的属性将包括SHF_ALLOC位。是否需要SHF_WRITE是跟处理器有关。第二部分有更详细的信息。* .dynstr该section保存着动态连接时需要的字符串,一般情况下,名字字符串关联着符号表的入口。第二部分有更详细的信息。* .dynsym该section保存着动态符号表,如&#8220;Symbol Table&#8221;的描述。第二部分有更详细的信息。* .fini该section保存着可执行指令,它构成了进程的终止代码。因此,当一个程序正常退出时,系统安排执行这个section的中的代码。* .got该section保存着全局的偏移量表。看第一部分的&#8220;SpecialSections&#8221;和第二部分的&#8220;Global Offset Table&#8221;获得更多的信息。* .hash该section保存着一个标号的哈希表。看第二部分的&#8220;Hash Table&#8221;获得更多的信息。* .init该section保存着可执行指令,它构成了进程的初始化代码。因此,当一个程序开始运行时,在main函数被调用之前(c语言称为main),系统安排执行这个section的中的代码。* .interp该section保存了程序的解释程序(interpreter)的路径。假如在这个section中有一个可装载的段,那么该section的属性的SHF_ALLOC位将被设置;否则,该位不会被设置。看第二部分获得更多的信息。* .line该section包含编辑字符的行数信息,它描述源程序与机器代码之间的对于关系。该section内容不明确的。* .note该section保存一些信息,使用&#8220;Note Section&#8221;(在第二部分)中提到的格式。* .plt该section保存着过程连接表(Procedure Linkage Table)。看第一部分的``SpecialSections''和第二部分的&#8220;Procedure Linkage Table&#8221;。* .rel&name& and .rela&name&这些section保存着重定位的信息,看下面的``Relocation''描述。假如文件包含了一个可装载的段,并且这个段是重定位的,那么该section的属性将设此,一个重定位的section适用的是.text,那么该名字就为.rel.text或者是.rela.text。* .rodata and .rodata1这些section保存着只读数据,在进程映象中构造不可写的段。看第二部分的`ProgramHeader''获得更多的资料。* .shstrtab该section保存着section名称。* .strtab该section保存着字符串,一般地,描述名字的字符串和一个标号的入口相关联。假如文件有一个可装载的段,并且该段包括了符号字符串表,那么section的SHF_ALLOC属性将被设置;否则不设置。* .symtab该section保存着一个符号表,正如在这个section里``SymbolTable''的描述。假如文件有一个可装载的段,并且该段包含了符号表,那么section的SHF_ALLOC属性将被设置;否则不设置。* .text该section保存着程序的``text''或者说是可执行指令。
前缀是点(.)的section名是系统保留的,尽管应用程序可以用那些保留的section名。应用程序可以使用不带前缀的名字以避免和系统的sections冲突。object文件格式可以让一个定义的section部分不出现在上面的列表中。一个object文件可以有多个同样名字的 section。引用:简单地说有如下结构命令行参数和环境变量栈堆未初始化数据段bss初始数据段正文段
C程序一直由下列部分组成:
1)正文段&#8212;&#8212;CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令;2)初始化数据段(数据段)&#8212;&#8212;在程序中所有赋了初值的全局变量,存放在这里。3)非初始化数据段(bss段)&#8212;&#8212;在程序中没有初始化的全局变量;内核将此段初始化为0。4)栈&#8212;&#8212;增长方向:自顶向下增长;自动变量以及每次函数调用时所需要保存的信息(返回地址;环境信息)。5)堆&#8212;&#8212;动态存储分。
|-----------|| ||-----------|| 栈 ||-----------|| | || /|/ || || || /|/ || | ||-----------|| 堆 ||-----------|| 未初始化 ||-----------|| 初始化 ||-----------|| 正文段 ||-----------|
http://community.csdn.net/Expert/topic/.xml?temp=.3182337
&&&&&& low address&& +--------------------------------+&& |&& _TEXT class 'CODP'&&&&&&&&&& |&& |&&&&&&& code&&&&&&&&&&&&&&&&&&& |&& +--------------------------------+--&& |&& _DATA class 'DATA'&&&&&&&&&& |&& |&&&& initialized data&&&&&&&&&& |&& +--------------------------------+ DGROUP&& |&& _BSS class 'BSS'&&&&&&&&&&&& |&& |&&&& uninitialized data&&&&&&&& |&& +--------------------------------+--&& |&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& |&& |&&&& FREE SPACE&&&&&&&&&&&&&&&& |&& +--------------------------------+&& |&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& |&& |&&&& STACK&&&&&&&&&&&&&&&&&&&&& |&& +--------------------------------+&& |&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& |&& |&&&& HEAP&&&&&&&&&&&&&&&&&&&&&& |&& +--------------------------------+&& |&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& |&& |&&&& FREE SPACE&&&&&&&&&&&&&&&& |&& +--------------------------------+&&&&&&&& high address
九、怎么快速检测出一个巨大的链表中的死链?我实在没有想出好办法,只能说,没办法,只能一个一个的比了...各位高手有没有什么好办法?死链:链表的某个接点的next指针指向了曾经出现过的接点,导致链表死循环。刚才忘了说:该链表是单链。
老迈的解决办法,很牛:以前的帖子里有这道题的简化版的答案,我再贴一次吧,。如果只是判断链表中是否有回路而不用具体求出回路的具体路径的话,则有一个取巧的办法。开两个遍历链表的指针,一个一次往前走一个结点,另一个往前走两个结点,当这两个指针相遇时,如果该接点的next==null,则无回路,否则说明有死链。
十,关于句柄类的信息,看c++编程思想Ch3,p12。
一,为分削得人憔悴,跺上高楼,跺上高楼,原来众人都在楼上。
二,关于数组的赋值:struct Node{&&&};int main(){&int str[20] = {1,50,3};//剩余元素都为0。只要有个,剩余都为0;&//但是如果没有初始化,int str[20];这时,数组并不初始化为0。而是任意值&Node nodeArr[20] = {{1,1.1,'a'}};//在没有构造函数的情况下,&//和前目数组一样,剩余节点都初始化为0。&//除第一个节点外,后面的个元素{0,0.0000,0}&&for(i=0; i&20; i++)&{&& printf("%d& ",str[i]);&& printf("%d& %f& %c/n",nodeArr[i].n, nodeArr[i].f, nodeArr[i].ch);&}&printf("/n");&return 0;}
但是在有了构造函数的情况下,用法就不同上面:struct Node{&&&&Node();&};Node::Node()//默认构造函数{&n=1;&f = 1.1;&ch = 'b';}int main(){&//int str[20] = {1,50,3};&//Node nodeArr[20] ={{1,1.1,'a'}};//这种用法编译错误,要求用构造函数构造对象&Node nodeArr[20] = {};// 每个Node对象调用默认构造函数,内部成员分别为&&&&&&& &// 1,1.1, 'b'&//可见:如果没有构造函数,就用与c相同的语法编译,&//如果有了构造函数,就必须用构造函数进行数组的初始化。这里就构和类是一样的&&for(i=0; i&20; i++)&{&& //printf("%d& ",str[i]);&& printf("%d& %f& %c/n",nodeArr[i].n, nodeArr[i].f, nodeArr[i].ch);&}&printf("/n");&return 0;}
四,一个有趣的面试题:哪为高手能帮帮我,在不使用if,while,do~~while等语句,不使用关系运算符,不使用MAX(),MIN()的情况下,怎样比较输入的a,b两个数的大小。(注:实现并不知道输入的数的大小)float max(float a,float b){&& float t1,t2;&& t1 = a +&& t2 = sqrt((a-b)*(a-b));//免得你说fabs中也用了判断语句&& return (t1 + t2)/2;}这里藏着很好的道理。t1 是二者的和,t2是大着比小者大的部分。如果把大出的部分加到小者的上面,正好是2倍的大者。
三,关于省缺参数的定义。如果一个程序只有一个cpp文件,而且这个函数没有函数声名,只有函数定义,那么这个函数的省缺参数可以放到函数定义中。比如:这种情况:#include &iostream&void fun1(int m = 3, char ch = 'b'){}int main (){
&& fun1();&& fun2();&& return 0;}
如果一个程序,有头文件,在头文件中有函数声名,或者没有头文件,但是有函数声名这种情况下,省缺参数必须放在函数的声名中,不能放在函数定义中,否则编译错误。比如://links.hvoid fun2(int m=3,char ch='a');
//links.cpp#include &iostream&#include "links.h"void fun1(int m = 3, char ch = 'b');//有声名,必须在声名处给出省缺参数void fun2(int m/*=3*/,charch/*='a'*/)//声名中给出,再不能在定义中设置省缺参数{}void fun1(int m /*=3*/, char ch/* ='b'*)//声名中给出,再不能在定义中设置省缺参数{}void fun3(int m=3, char ch='c')//没有函数声名,可以在定义时给出省缺参数{}int main (){
&& fun1();&& fun2();&& fun3();&& return 0;}
四,分布式系统分布式系统是通过通信网络将物理上分布的具有自治功能的数据处理系统或计算机系统互联起来,实现信息交换和资源共享,协作完成任务。分布式系统要求一个统一的操作系统,实现系统操作的统一性。分布式操作系统管理分布式系统中的所有资源,它负责全系统的资源分配和调度,任务划分,信息传输控制协调工作,并为用户提供一个统一的界面,用户通过这一界面实现所需要的操作并使用系统资源,至于操作定在哪一台计算机上执行或使用哪台计算机的资源则是操作系统完成的,用户不必知道。此外,由于分布式系统更强调分布式计算和处理,因此对于多机合作和系统重构,健壮性和容错能力有更高的要求,要求分布式操作系统有更短的相应时间,更高吞吐量和更高可靠性。
五,冒泡排序算法:void order(char* chs, const int& n){//冒泡排序算法,zhangggdlt&int i,j;&int maxS&for (i=0; i&n; i++)//n-1&{&&chs[0] = chs[1];&&maxSubscript = 1;&&for (j=2; j&=n-i; j++)&&{&&&if (chs[0]&chs[j])&&&{&&&&chs[0] = chs[j];&&&&maxSubscript =&&&}&&}&&chs[maxSubscript] = chs[n-i];&&chs[n-i] = chs[0];&}&chs[0] = ' ';}六、关于命名空间namespace A{#define MIN 20int k = 3;}其实,#define MIN 20 可以穿透命名空间,也就是说不受命名空间限制,所以放入放出无所谓,建议放在外面。构造函数不能是静态函数。
七:关于多字节数据类型在内存中的存储问题:int ,short 分别是4、2字节。他们的存储方式是:int data = 0xf4f3f2f1;其中低位存放在编址小的内存单元,高位存放在编址搞的内存单元地址:0x8000&&&&& 0x8001&&& 0x8002&& 0x8003数据: f1&&&&&&&&&& f2&&&&&&&& f3&&&&& f4
八、枚举型定义,枚举元素的值可以重复。typedef enum{&monday=1, cat,tuesday=1,dog}用法:week w =int k =上面都是可以的。
此时,dog的值是它前面的值加一,里面有俩个元素值是相等的。同理,cat也一样。cat 和 dog的值都是2。
九,获取时间,包括星期的程序#include&time.h&#include &stdio.h&
int main(){char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};time_struct tm *p;time(&timep);p=localtime(&timep);&/*取得当地时间*/printf ("%d.%d.%d ", (1900+p-&tm_year),(1 +p-&tm_mon), p-&tm_mday);//注意月份载localtime是从0。。11 代表1到12月,所以要加1。printf("%s& %d:%d:%d/n", wday[p-&tm_wday],p-&tm_hour, p-&tm_min, p-&tm_sec);return 0;}
十、各个分析#include &iostream&
class A{&};
class B:public A{public:&&& int b1;&B(){b1=2;}&int geti(){&&cout&&"geti called,b1 is "&&b1&&&&return 1;&}};
int main(){&&A&B&&B* pb=(B*)&a;&pb = (B*)&k;&pb-&geti();&&&& cin&&i;&return 0;
分析:你的类A是基类,类B是子类。把基类的对象a的地址,强制转换成子类的地址。这样很危险,会导致数据裁减。其实是更本不希望这样做的。强制类型转换,可以将任何类型都可以转换,虽然语法没有错误,但是语意上没有意义。比如:我们可以B* pb=(B*)&k;这样编译也没有错误,但是,更本没有意义。
你的转换同样也是一个道理。你的a对象里跟本就没有B类函数geti所要用的东西,但是对于计算机来说,它不管这些,它只要对指针所指的内存进行操作就行了,它认为从指针所指的位置开始,后面就是一个B类对象。所以编译可以通过。但是没有意义。
一、数字加密算法DES(Data Encryption Standard)
二、在linux下,最后连接成可执行文件时,如果连接的是一般的.o文件,则整个文件的内容都会被装入可执行文件中;如果连接的是库,则只是从库中找到程序中用到的变量和函数,将他们装入可执行文件中,那些放在库中但是没有被程序所引用的变量和函数则不会被连接到可执行文件中。所以使用库可以节省大量的开发时间,写较大的程序时,把程序模块放到库中。
三、一个类型问题int PacketInfo::packetLen(const void* packet){&u_int_8 tempByte[4];&//use to store、exchange the info from thepacket&int ethT&int packetLen = 0;&memcpy(tempByte, (u_int_8*)packet+12, 2);&......}我得函数中要实现内存拷贝,memcpy的原型是定义函数& void * memcpy (void * dest,const void *src, size_t n);&我开始用memcpy(tempByte, packet+12,2);编译报告错误,后来换成memcpy((void*)tempByte, (void*)packet+12, 2);&也不能, 原来错误在一个空类型指针和一个数字相加,不能得到类型所占空间大小,于是无法确定packet+12的地址。还有这个例子:void memecopy(void* dp, const void* sp, int num){&int i=0;&while(i&num)&{&&*((unsigned char*)dp)++ = *((unsigned char*)sp)++;&&i++;&}}开始我没有注意,只是*dp++ = *sp++; , 结果当然编译不过去,对一个void指针加加,系统当然不知道干什么了。
四、在c++中, 函数没有层次关系,可以有下面的函数调用情况。void funB();
void funA(){&funB();}void funB(){&funA();}只要函数调用前对被调用函数声名了就可以了。
五、内联函数的使用限制内联函数目的是为了提高函数执行效率(当用到内联函数时,不进行函数调用,而是类似于宏替换),内联函数定义有一下限制。1、函数中不可以有静态变量2、函数中不能太复杂,不能有switch、goto等语句3、不能递归4、不能定义数组。如果出现了上述情况,编译器会自动忽略了inline,将其编译为一般函数。
六、在内存中, 数是以补码形式存在的, 整数的补码仍然为整数,负数的补码是正数的各位(包括符号位)取反加1。比如:#include &stdio.h&int main(){&char ch = -3;&//-1:&& -2:7:8:&&for(int i=0; i&8; i++)&{&&value = ((ch&&i) & 0x80)&&7;&//&&printf("%d ", value);&}&printf("/n");&return 0;}
七、linux 下 ip地址转换函数:&#include &sys/socket.h&&#include &netinet/in.h&&#include &arpa/inet.h&
& int inet_aton(const char *cp, struct in_addr *inp);
&in_addr_t inet_addr(const char *cp);
&in_addr_t inet_network(const char *cp);
&char *inet_ntoa(struct in_addr in);
&struct in_addr inet_makeaddr(int net, int host);
&in_addr_t inet_lnaof(struct in_addr in);
&in_addr_t inet_netof(struct in_addr in);
七、关于逗号算符int i=0;t=i++,++i,i++;//结果t=1; i=3;在c++课本上说, 逗号操作是强迫从左向右赋值。整个语句的值是最后一个分操作。比如:int a = 3;a=3*5, a*4;//语句的结果是60(a=3*5, a*4),a+5;//结果是20int a=2, b=3, c=4;print("%d, %d, %d/n", (a,b,c), b, c);打印的第一个整数是(a,b,c),它的值是最后一个,所以是c,最后的答案是:4, 3, 4
也就是说, 上面的语句分成四部分,第一部分为t=i++, 第二部分为++i,第三部分为i++.还有下面的例子:int a[] = {1,2,3,4,5};int *i=a,k;int b = 0;b = k=*i++,printf("%d-&",k),k=*++i,printf("%d-&",k),k=*i++,printf("%d-&/n",k);printf("%d/n", b);输出为:1-&3-&3-&1(完)。
七.一(相关上面,printf()的怪异)int array[5]={8,5,13,55,6};int *p=printf("%d,%d,%d/n",*p++,*++p,*p++);printf("%d,%d/n",*p,++*p);for(int i=0;i&5;i++)&printf("%d,",array[i]);结果为:13,13,856,568,5,13,56,6,非常不解,以后总结。找到答案了,和一个同学讨论的结论。在c++的函数中, 函数在压栈时, 参数是从右到左压栈的, 比如:void pp(int a, int b, int c){&&&d = 0;&e = 2;}int main(){&...&pp(...);&}这时, 函数pp的栈中有pp的参数, main返回地址, 和现场信息。pp的参数压栈是:c, b , a。这样, 先压c, 那么要先算c, 也就是说先算最后一个参数,对于函数printf("%d,%d,%d/n",*p++,*++p,*p++);来说,先算后一个*pp++,得出0(c 最后一个参数),再算中间一个*++p得出2(b 中间一个参数), 最后算第一个*p++(a 第一个参数)得出2。所以a=2, b= 2, c=0。打出的是220。
好像printf()里如果涉及到每个变元参与运算,那么输出就要倒过来。
七.一 再谈printf()printf 的格式中, 如果出现了/0 /数字(八进制的1到3位) /x数字的情况处理(十六进制的1到2位)。/0当然是字符串的结束标志了。/101& 这时, /与后面的1到三位八进制数字表示一个字符。注意,是按八进制算的, 不是十进制。/x61& /与后面的十六进制表示一个字符。printf("/101 /x41");结果是:A A
八、关于sizeof问题
void Func(char a[100]){&char b[100];&&printf("%d/n", sizeof(a)); // 4字节而不是100字节&printf("%d/n", sizeof(b));&//100&}分析:俩个一样,不用的原因要追踪到函数的传参问题。当数组作为参数传入函数时,这个数组作为指针传入,也就是所说的传地址。所以前面的是4,而不是100。
九、符号的结合方向。在c++中, 运算符一般是从左向右结合的,只有赋值符是特例,从右向左结合。比如:a+b+c*d& 从左向右结合a = b = c =d;& 从左向右结合。
十、再轮++、--操作。int i = 3,k = (++i)+(++i)+(++i);k的值是18。原因是每个操作数每个操作数先++, 最后算加法。i++三次成了6,最后是三个六相加,得18int i=3,k=(i++)+(i++)+(i++);结果是9。原因是i先算加法,三个三相加,最后++,i=6。
一、在c语言中规定,凡不加类型说明得函数,一律自动按整型处理。在函数中,如果返回类型与函数类型不同,则以函数类型为准,对数值型数据,可以自动进行数据类型转换,即函数类型决定返回类型。如下:max(x,y){&float x, y,&z = x&y?x:y;&return (Z);&}main(){&float a,&&scanf("%f, %f",&a, &b);&c = max(a,b);&printf("Max is %d/n", c);&}结果是:1.5,2,5Max is 2max(x,y) 没有明显定义类型,按整型处理,返回一定是整型。在c函数中,如果没有返类型和return,这是并不是说函数真没有return,而是要返回一个用户无用得值,这个值不确定。比如://test.c#include &stdio.h&#include &string.h&pp(){}pp1(){}main(){&int c = 0;&c = pp();&printf("%d/n", c);
&c = pp1();&printf("%d/n", c);}输出为:02这俩个值不确定。如果函数不想要返回,则要用void 定义函数类型。这样就没有返回值了。
二、c函数定义的一般形式:无参函数定义:类型标识符 函数名(){说明部分&& 语句}
有参函数定义的一般形式:类型标识符 函数名字(形式参数列表)形式参数说明{说明部分&语句}如:int max(x,y)int x,y;&//形式参数说明部分{&&//函数体中的说明部分&z=x&y?x:y;&return (z);}
函数调用说明:如果函数参数列表中包含多个实参,各系统对于实参求值的顺序是不确定的,有的系统自左向右顺序求实参,有的自右向左,许多c版本(Turbo C 和MS C)是按自右向左的顺序求值。这就导致了前面的printf("%d %d %d /n", *p++, *++p, *p++);的结论。
三、宏定义的范围#define G 9.18&& ^&& |&& |& G的有效区域。&& |&& v
#undef G宏定义后面不能加分号, 否则连分号一起作为宏定义的部分。宏定义不做类型检查,在预编译时处理,只有展开后才会根据替换来决定是否正确。
四、函数参数和函数的局部变量void pp(char str1[]){&&for(i=0; i&10; i++)&&printf("%c ", *str++);&//1&char str2[20];&for(i=0; i&10; i++)&&printf("%c ", *str2++);&//2}在这个函数中,函数的参数str1是一个数组,函数的局部变量str2也是一个数组。但是在1处,编译是正确的,但是在2处,编译通不过。它们都是数组,但是,函数参数如果是数组,那么当作地址处理,所以str1可以作为一个指针变量处理。可以用地址的++运算,但是对于局部变量str2,str2是一个数组,数组的地址是一个常量,不能++。这和前面提到的sizeof的例子是一个道理。void pp(int str[10]){&printf("%d /n", sizeof(str));&//4& 只是地址。&int str2[10];&printf("%d /n", sizeof(str2));&//40&& 数组的大小。}
五、指向函数的指针。一般形式为:& 数据类型 (*指针名字)(参数链表);在c语言中,不要求参数链表,只在调用时候需要。但是c++中必须要求在函数指针定义的时候给出参数链表。比如://test.c#include &stdio.h&#include &string.h&void pp(int a){&printf("ok/n");}int main(){&&void (*p)();&//c的函数指针定义, 可以不写出参数链表,没有错误。c++不行。&p =&//在给函数指针赋值时,只需要给出函数名字而不必要给出参数&(*p)();&//通过函数指针调用函数&return 0;}
//test.cpp#include &stdio.h&#include &string.h&void pp(int a){&printf("OK!/n");}int main(){&&int a = 3;&void (*p)();&p =&//错误,必须定义:void (*p)(int);才可以。&//p = p1;&(*p)(a);&return 0;}c的定义并不严格, 但是c++严格的多了,同样,c的函数可以不定义返回类型,但是c++必须定义。
六、函数指针做函数参数把函数名字作为参数传递给一个函数,这样的好处是:比较灵活,比如一个函数sub需要调用俩个函数,如果直接在sub函数中调用,那么sub函数就写死了,如果想在sub中调用一系列函数中的任意俩个,这时用函数指针做参数,可以根据赋值的不同而调用不同的函数。例如:sub(int x, int y, int(*fun)());{&....&(*fun)();}.... int fun1(){&...}main(){&int a,b;&sub(a, b, fun1);}
七、关于指针和数组联合的定义:
int (*pointer1)[4];int *pointer2[4];看二者的区别: 前面pointer1是指向一个有四个元素的一维数组的指针;后面pointer2,一个是定义一个有四个元素的一维指针数组,数组的每个元素是一个指针变量。
八、回调函数浅谈
这是一种类似根据不同条件调用同一个返回值+参数类型一致的不同函数实现的机制.
针对Windows的消息机制一般回调函数指窗口函数, 根据不同消息都使用该窗口函数进行操作.针对用户自己的应用也可以建立起相应的消息机制, 类似VB里面的事件1. 声明一个函数指针2. 提供函数实现的一方在初始化的时候将函数指针初始化到相应的实现函数注册到调用者3. 在特定事件/条件发生的时候, 调用者使用函数指针进行调用.这就是回调函数的一般操作模式, 其实你如果学习COM就会发现, 里面的ConnectionPoint也是利用这种方式进行的, 客户端注册自己的事件处理子程序给服务队组件, 组件通过调用这些函数触发事件, 其实回调的精髓就是你规定函数形式(返回值, 参数)我提供实现和具体的调用地址.
九、对回调函数的例子://test.cpp#include &stdio.h&typedef void (*pcb)(int);&//为了简化函数指针类型的变量定义,提高程序的可&&&&&&&//读性,我们需要把函数指针类型自定义一下。&&&&&&&void pp(int a)&//回调函数,回调函数可以象普通函数一样被程序调用,{&&&&//但是只有它被当作参数传递给被调函数时才能称作回调函数。 &printf("OK!%d/n", a);}
void called(int n, pcb p)&//被调函数,因为它被用户程序调用,所以叫被调函数{&&&&&&&&//我想是这样,用户在调用上面的函数时,&&&&&&&&//需要自己实现一个pcb类型的回调函数:&printf("OKK");&(*p)(n);}int main(){&&int n = 1;&called(n, pp);&&//把pp当作一个变量传递给called函数&&&&&&&return 0;}一个类的成员如果想做回调函数,那么该成员一定要为静态成员,比如:#include &stdio.h&typedef void (*pcb)(int n);class A{public:& static void getN(int n)&&//该成员一定为static, 否则编译错误& {& &printf("OK Get it!/n");& }};
void pp(int n, pcb p){&(*p)(n);}int main(){&&A&int n = 3;&pp(n, a.getN);&return 0;}
参考:http://www-/developerWorks/cn/linux/l-callback/index.shtml&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& (待续)
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
1.Linux安装: 下载网址:http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso 下载:/CentosSoft/iso/ 阿里云开源镜像站: / 搜 ...
奔跑中的2015:Linux运维学习八大禁忌 随着Linux服务器在企业中的日益普及,高级Linux运维工程师岗位缺口也在递增.目前,为企业人才输送人才的各大院校,很少有开设Linux课程.我所了解和接触从事Linux运维工作同事和朋友多半是半路出家,很少有一出校门就去做Linux运维的相关工作.问其为何学习Linux运维技术?有的人说是兴趣所致,也有的人说 ...
Android学习笔记(二) 学习内容: Android技术结构图 Android的目录结构 Android程序打包 & 安装卸载的过程 Activity的启动流程 [TOC]*** Android 技术结构图: 解释: 第一层 Android最底层还是Linux技术,里面包含了苏需要的Display.Camera.Keypad等等的驱动程序. 第二 ...
1个目标 强大的前端学习工作氛围,玉伯.李牧.高云.寒冬等等优秀的前端前辈一直是我追随的目标.每天唤醒你的应该是一个梦想而不是闹钟. 20篇博客 适当做点总结,写些博客,提高语言表达能力和相关知识点总结把握重点能力. 60x2页 B5手写笔记 数不清的草稿纸.对于作用域链和闭包等知识概念,画图,会比语言更利于记忆和在面试中表达你的思路. 18篇文档 摘抄 ...
C++ Primer(第五版)学习笔记_9_标准模板库_multimap多重映照容器 多重映照容器multimap与map结构基本相同,但由于重复键值存在,所以multimap的元素插入.删除.查找都与map的方法不相同.
1.multimap对象创建.元素插入
插入元素时,需要使用insert()方法和类似pair&string,d ...
C++ Primer(第五版)学习笔记_8_标准模板库_map映照容器 map映照容器的元素数据是由一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系. map映照容器的数据结构也是采用红黑树来实现的. 1.map创建.元素插入和遍历访问 #include &iostream& #include &stdio.h& # ...
剑指Offer学习 剑指Offer这本书已经学习完了,从中也学习到了不少的东西,现在做一个总的目录,供自已和大家一起参考,学如逆水行舟,不进则退.只有不断地学习才能跟上时候,跟得上技术的潮流! 目录 第01-10题 第11-20题 第21-30题 第31-40题 第41-50题 第51-60题 第61-67题 特别声明
C++ Primer(第五版)学习笔记_7_标准模板库_multiset多重集合容器 多重集合容器multiset与set一样,也是使用红黑树来组织元素数据的,唯一不用的是,multiset允许重复的元素键值插入.其结构示意图如下: 1.multiset元素插入 #include &iostream& #include &stdio.h&g ...
[.net 面向对象程序设计进阶] (10) 序列化(Serialization)(二) 通过序列化博客园文章学习XML的序列化 本节导读: 上节我们介绍了二进制流的序列化,本节继续上节内容介绍XML序列化和反序列化.XML作为W3C标准数据传输格式,将XML对象化处理,认识和使用XML序列化类XmlSerializer,是.NET面向对象程序设计必须要掌握 ...

我要回帖

 

随机推荐