微博怎样改名c+f改名

您的举报已经提交成功,我们将尽快处理,谢谢!
一、非常简单,就像用计算器一样。如a=b+c、a=b-c、a=b*c、a=b\c,只要先定义a、b、c三个数就行了。
二、输入一个华氏温度,要求输出摄氏温度。...
char不可以的,要是char的数组
如char x[10]="中";
就是c不等于a的意思,也就是比较c与a是否相等,一般用在判断语句中。还有,这是c==a。
可以参考应试书本的 周末快乐 请给我一个好评哦
#include &stdio.h&
void reverse(char *line){
大家还关注
我运行了一下程序,发现不管输入什么,都是输出第一个字符串.
这是标准***.">看一下这个简单的C程序? 3.编程题
size_t是什么类型的啊 好象不是bu...
int fileName=112;
int date[3]={4,7,12};
ofstream outputFile(fileName.c_str(),ios::app);
while(i<3)
outputFile< cout<<"创建完成。"<帮忙看看以下的C++程序代码。 #inc...怎么起好英文名很多英文名是和中文名谐音的
自己选吧1、字母A开头的女英文名:Abigail阿比盖尔Abby艾比 (Abigail的简写)Ada艾达 (Adelaide的简写)Adelaide阿德莱德Adeline艾德琳Alexandra亚历桑德拉Ailsa艾丽莎Aimee艾米Alexis亚历克西斯Alice爱丽丝Alicia艾丽西娅Alina艾琳娜Allison艾莉森Alyssa艾莉莎/爱丽丝娅Amanda阿曼达Amy艾美Amber安伯Anastasia阿纳斯塔西娅 (昵称Stacey)Andrea安德莉亚Angel安琪Angela安吉拉Angelia安吉莉亚Angelina安吉莉娜Ann安 (Hannah的英文形式)Anna安娜Anne安妮 (同Ann)Annie安妮 (Ann的昵称)Anita安尼塔 (Ann的西班牙写法)Ariel艾莉尔April阿普里尔Ashley艾许莉/阿什利/艾希礼Audrey欧蕊Aviva阿维娃 (同Avivahc和Avivi)2、字母B开头的女英文名:Barbara笆笆拉Barbie芭比Beata贝亚特Beatrice比阿特丽斯 (同Beatrix)Becky贝基 (Rebecca的昵称)Bella贝拉 (Isabella 的昵称)Bess贝斯Bette贝蒂Betty贝蒂 (Elizabeth的昵称)Blanche布兰奇Bonnie邦妮Brenda布伦达 (Brandon及Brendan的女性形式)Brianna布莱安娜Britney布兰妮Brittany布列塔尼3、字母C开头的女性英文名:Camille卡米尔Candice莰蒂丝Candy坎蒂Carina卡瑞娜Carmen卡门Carol凯罗尔Caroline卡罗琳Carry凯丽Carrie凯莉 (Carol及Caroline的昵称,同Kerry)Cassandra卡桑德拉Cassie凯西 (Catherine,Cassandra的昵称)Catherine凯瑟琳 (Katherine的英文形式,同Katherine)Cathy凯茜 (Catherine的昵称,同Kathy)Chelsea切尔西Charlene沙琳 (同Caroline,Charlotte)Charlotte夏洛特Cherry切莉Cheryl雪莉尔 (Charlotte的另一形式,亦同Sheryl)Chloe克洛伊Chris克莉丝 (Christine,Kristine的简写,同Kris)Christina克里斯蒂娜 (同Christine)Christine克里斯汀Christy克里斯蒂 (Christine的简写)Cindy辛迪 (Cinderella,Cynthia,Lucinda的昵称)Claire/Clair克莱尔Claudia克劳迪娅Clement克莱门特Cloris克劳瑞丝Connie康妮 (Constance的昵称)Constance康斯坦斯Cora科拉Corrine科瑞恩Crystal科瑞斯特尔 (同Krystal)4、字母D、E开头的女性英文名:Daisy戴茜Daphne达芙妮Darcy达茜Dave戴夫(David 的昵称)Debbie黛比 (Deborah,Debra的昵称)Deborah黛博拉Debra黛布拉Demi黛米Diana黛安娜Dolores德洛丽丝Donna堂娜Dora多拉Doris桃瑞丝Edith伊迪丝Editha伊迪萨Elaine伊莱恩Eleanor埃莉诺Elizabeth伊丽莎白Ella埃拉Ellen爱伦Ellie艾莉 (Eleanor, Ellen的昵称)Emerald艾米瑞达Emily艾米丽Emma艾玛Enid伊妮德Elsa埃尔莎 (Elizabeth的昵称)Erica埃莉卡 (Eric的女性形式)Estelle爱斯特尔Esther爱丝特Eudora尤杜拉Eva伊娃Eve伊芙Evelyn伊夫林5、字母F、G开头的女性英文名字:Fannie芬妮 (同Frances,Fanny)Fay费怡Fiona菲奥纳Flora福罗拉Florence弗罗伦丝Frances弗郎西丝 (Francis的女性形式)Frederica弗雷德里卡Frieda弗里达Flta上海英语外教Gina吉娜 (Angelina,Regina的昵称)Gillian吉莉安 (Juliana的异体)Gladys格拉蒂丝 (Claudia的威尔斯形式)Gloria格罗瑞娅Grace格瑞丝Grace格瑞丝Greta格瑞塔 (Margaret的昵称)Gwendolyn格温多琳6、字母H、I开头的女性英文名字:Hannah汉娜Haley海莉Hebe赫柏Helena海伦娜Hellen海伦 (亦作:Helen)Henna汉纳Heidi海蒂 (Adalheid, Adelaide的昵称)Hillary希拉里/希拉蕊/希拉莉Ingrid英格丽德Isabella伊莎贝拉Ishara爱沙拉Irene艾琳Iris艾丽丝Ivy艾维7、字母J开头的女英文名字:Jacqueline杰奎琳Jade小玉Jamie詹米 (James的女性形式)Jane简 (John的女性名词)Janet珍妮特 (同Jane)Jasmine贾斯敏Jean姬恩 (Jane的苏格兰形式)Jenna珍娜Jennifer詹妮弗Jenny詹妮 (同JJane,Jennifer的昵称)Jessica杰西卡 (Jessee的女子形式)Jessie杰西 (Jasmine, Jessica的昵称; Janet的苏格兰形式)Jill姬尔 (Gillian的昵称)Joan琼 (同JJohn的女性形式)Joanna乔安娜Jocelyn乔斯林Joliet乔莉埃特Josephine约瑟芬Josie乔茜(同Josephine)Joy乔伊Joyce乔伊斯 (Josephine的昵称)Judith朱迪丝Judy朱蒂 (Judith的昵称)Julia朱莉娅Juliana朱莉安娜Julie朱莉June朱恩8、字母K、L开头的女英文名字:Karen凯琳 (Katherine的丹麦形式)Karida卡瑞达Katherine凯瑟琳 (同Catherine)Kate凯特 (Katherine的昵称)Kathy凯西 (Katherine,Katherleen的昵称;同Cathy, Kathie)Katie/Kate/Katy卡蒂Katrina卡特里娜Kay凯 (Katherine的昵称;同Kaye)Kayla凯拉Kelly凯莉Kelsey凯尔西Kimberly特里娜Kitty基蒂 (Catherine的昵称)Lareina莱瑞拉Lassie蕾西Laura劳拉 (Lawrence的女性形式)Lauren罗兰/劳伦Lena莉娜 (Helena的昵称)Lydia莉迪娅Lillian莉莲 (亦作lilian)Lily莉莉Linda琳达lindsay琳赛Lisa丽莎 (Elizabeth的别名)Liz莉兹 (Elizabeth的昵称)Lora/Laura洛拉Lorraine罗琳Louisa路易莎Louise路易丝Lucia露西娅Lucy露茜Lucine露西妮Lulu露露 (Louise,Louisa的昵称)Lydia莉迪娅/莉蒂亚Lynn林恩9、字母M开头的女英文名字:Mabel梅布尔/玛佩尔Madeline马德琳Maggie玛姬 (Margaret的昵称)Mamie玛米 (Margaret, Mary 的昵称)Manda曼达Mandy曼迪 (Amanda,Manda,Melinda的昵称)Margaret玛格丽特Mariah玛丽亚 (同Mary)Marilyn玛里琳/玛丽莲/玛丽琳Martha玛莎Mavis梅维丝Mary玛丽Matilda玛蒂尔达Maureen莫琳Mavis梅维丝Maxine玛克辛May梅Mayme梅米Megan梅甘Melinda梅琳达Melissa梅利莎Melody美洛蒂Mercedes默西迪丝Meredith梅瑞狄斯Mia米娅Michelle米歇尔 (Michael的女性形式)Milly米莉 (Camille,Emily,Melissa的简称)Miranda米兰达Miriam米里亚姆Miya米娅Molly茉莉Monica莫尼卡Morgan摩尔根/摩根10、字母N、O开头的女生英文名:Nancy南茜 (Nan的别名)Natalie娜塔莉Natasha娜塔莎 (亦作natascha))Nicole妮可Nikita尼基塔Nina尼娜 (Anna的昵称)Nora娜拉/诺拉Norma诺玛Nydia尼迪亚Octavia奥克塔维亚Olina奥琳娜Olivia奥利维亚Ophelia奥菲莉娅Oprah奥帕 (同Opera,Opie)11、字母P、Q、R开头的女生英文名:Pamela帕梅拉Patricia帕特丽夏Patty芭迪 (Mathilda,Matilda,Martha 的昵称)Paula保拉Pauline波琳 (同Paula)Pearl珀尔Peggy帕姬 (Margaret的昵称)Philomena菲洛米娜Phoebe菲比Phyllis菲丽丝Polly波莉Priscilla普里西拉Quentina昆蒂娜 (Quentin的女性形式)Rachel雷切尔Rebecca丽贝卡Regina瑞加娜Rita丽塔 (Margaret的昵称)Rose罗丝Roxanne洛克萨妮Ruth露丝11、字母S开头的女生英文名字:Sabrina萨布丽娜Sally萨莉Sandra桑德拉 (Alexandra的昵称)Samantha萨曼莎Sami萨米Sandra桑德拉Sandy桑迪 (Andra的昵称)Sarah/Sara莎拉Savannah萨瓦纳/萨瓦娜Scarlett斯佳丽/斯嘉丽Selma塞尔玛Selina塞琳娜Serena塞丽娜Sharon莎伦 (同Sarah)Sheila希拉Shelley/Shelly雪莉 (同Sheila,Shelby,Shirley)Sherry雪丽 (同Charlotte,Cher,Sarah,Shirley)Shirley雪莉Sierra斯莱瑞Silvia西尔维亚Sonia索尼亚Sophia索菲娅Stacy丝塔茜 (Anastasia的昵称)Stella丝特拉 (Estelle的昵称)Stephanie斯蒂芬妮Sue苏 (Susan的昵称)Sunny萨妮 (Sonia的昵称)Susan苏珊12、字母T、U、V开头的女生英文名字:Tamara塔玛拉Tammy苔米 (Tamara的昵称)Tanya/谭雅坦尼娅 (Tatiana的昵称)Tasha塔莎Teresa特莉萨Tess苔丝 (Tessa,Teresa的昵称)Tiffany蒂凡妮Tina蒂娜Tonya棠雅/东妮亚 Tracy特蕾西Ursula厄休拉Vanessa温妮莎Venus维纳斯Vera维拉Vicky维姬 (Victoria的昵称)Victoria维多利亚Violet维尔莉特Virginia维吉妮亚Vita维达Vivian薇薇安13、字母W、X、Y、Z开头的女英文名:Wanda旺达Wendy温蒂 (Gwendolyn,Wanda的昵称)Whitney惠特尼Wynne韦恩Winnie温妮Yolanda尤兰达Yvette伊薇特 (同Yvonne)Yvonne伊温妮Zara莎拉Zelda塞尔达Zoey/Zoe佐伊Zora卓拉
为您推荐:
其他类似问题
扫描下载二维码C/C++ - 随笔分类 - 网名还没想好 - 博客园
posts - 360, comments - 41, trackbacks - 0, articles - 2
随笔分类 - C/C++
摘要: 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)-- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) -- 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分...
摘要: 一、引用的本质是什么说到引用,一般C++的教材中都是这么定义的:1,引用就是一个对象的别名。2,引用不是值不占内存空间。3,引用必须在定义时赋值,将变量与引用绑定。那你有没有想过,上面的定义正确吗?编译器是如何解释引用的?这里先给出引用的本质定义,后面我们再进一步论证。1,引用实际是通过指针实现的。...
摘要: 为什么构造函数不能是虚函数?这里需要明白一个概念,那就是虚函数表vtbl,每一个拥有虚函数成员函数的类都有一个指向虚函数表的指针。对象通过虚函数表里存储的函数地址来调用虚函数。那虚函数表的指针是在什么时候初始化的呢?当然是构造函数。当我们通过new来创建一个对象的时候,第一步是申请需要的内存,第二部...
摘要: 在C++中,基类必须指出希望派生类重新定义哪些函数,定义为virtual的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数。引用和指针的静态类型与动态类型可以不同,这是C++用以支持多态性的基石。通过基类引用或指针调用基类中定义的函数时,我们并不知道执行函数的对象的确切类型,执行函数的对象可能是基类类型的,也可能是派生类型的。如果调用非虚函数,则无论实际对象是什么类型,都执行基类类型所定义的函数,如果调用虚函数,则直到运行时才能确定调用哪个函数,运行的虚函数是引用所绑定的或者指针所指的对象所属类型定义的版本。
摘要: 针对const_cast,太多人在用同一个示例问同一个问题:void main(){const int a = 3;const int *pc = &a;int *p = const_cast(&a);*p = 5;printf(&%d,%d,%d&,*p,*pc,a); //结果是 5,5,3}最终输出的a,为何是3而不是5?C++对用const定义的常数变量,不是靠地址空间中的内容来取数的,而是靠保存在符号表中的索引来取数的,因此常数变量a无论什么情况下使用都是常数3。事实上,变量a地址空间中的内容确实是5,但即使你*(&a)来取数仍是3。你可以
摘要: C++的四种强制类型转换,所以C++不是类型安全的。分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型。那为什么还需要一个新的C++类型的强制转换呢?新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。C++中风格是static_cast(content)。C++风格的强制转换其他的好处是,它们能更清晰的表明它们要干什么。程序员只要扫一眼这样的代码,就能立即知道一个强制转换的目的。四种转换的区别:static_cast:可以实现
摘要: 1,C++在定义函数重载的时候形参不管是不是const的他们都是等价的,除非形参是const引用。举个例子:void fun(int a){...}与void fun(const int a){...}是等价的,这样重载会报错说redefinition。void fun(int &a){...}与void fun(const int &a){...}这样就是正确的。2,不能从const成员函数返回指向类对象的普通引用,const成员函数只能返回*this作为一个const引用。const test_const &fun()const{...;return *this}
摘要: 我们先看一段代码: 建立people.cpp 文件,然后输入下列内容:class People{ public: explicit People (int a)//加上了explict关键字的构造函数 { age=a; }};void foo ( void ){ People p1(10); //方式一 People p3=10; //方式二} 在 C++ 中, 如果一个类有只有一个参数的构造函数,C++ 允许一种特殊的声明类变量的方式。在上面的方式二: 写下如People p3=10这样的代码,且恰好10的类型(整型int)正好是people类单参数构造函数的参数类型,这时
摘要: 问题:现有类A定义如下:class A{public: A(int a) //构造函数 { m_a = cout&&&constructor&&& } A(const A &d) //复制构造函数 { m_a = d.m_a; cout&&© constructor&&& } A& operator=(const A &oA) //重载赋值操作符 { m_a = oA.m_a; cout&&&operator=&<
摘要: 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:classCxString//没有使用explicit关键字的类声明,即默认为隐式声明{public:char*_int_CxString(intsize){_size=//string的预设大小_pstr=malloc(size+1);//分配strin
摘要: 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如:class CExample{public: CExample():a(0),b(8.8){} CExample(){ a=0; b=8.8; } }; 上面例子中两个构造函数的结果是一样的。上面的构造函数(使用初始化列表的构造函数)显示地初始化类的成员;而没有使用初始化列表的构造函数式对类的成员赋值,并没有进行显示地初始化。初始化和赋值...
摘要: 原文地址:/quanhaili/blog/item/5a40ba86b37e1b22c65cc38f.html类中的静态成员真是个让人爱恨交加的特性。我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动。静态类成员包括静态数据成员和静态函数成员两部分。一 静态数据成员:类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数据成员还具有以下特点:1.静态数据成员的定义。静态数据成员实际上是类域
摘要: 写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide)。在早期的C++书籍中,可能翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的,他们是英语专业的),常常把重载(overload)和覆盖(override)搞错! 我们先来看一些代码及其编译结果。 实例一: #include &stdafx.h& #include class CB { public: void f(int) { cout class CB{public: virtual void f(int) { cout c...
摘要: 为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned1. size_t是全局定义的类型;size_type是STL类中定义的类型属性,用以保存任意string和vector类对象的长度2. string::size_type制类型一般就是unsignedint,但是不同机器环境长度可能不同win32和win64上长度差别;size_type一般也是unsignedint3. 使用的时候可以参考: string::size_typea=123; vectorsize_typeb=234; size_tb=456;4. size_
摘要: 1,shell中的变量对大小写敏感。2,shell中的变量没有数据类型。本质上,shell脚本中的变量都是字符串,在变量的解释上则依赖于shell脚本中变量的定义。shell中的变量以字符串的形式存储在内存中要么解释为数字要么解释为字符串。例如,整形变量也是字符串,shell中允许比较操作和整数操作。其关键因素是,这个整形变量中的值是否只有数字。
摘要: 功能描述:根据文件描述词来操作文件的特性。 用法: int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); 参数: fd:文件描述词。 cmd:操作命令。 arg:供命令使用的参数。 lock:同上。 有以下操作命令可供使用 一. F_DUPFD :复制文件描述词 。 二. FD_CLOEXEC :设置close-on-exec标志。如果FD_CLOEXEC位是0,执行execve的过程中,文件保持打开。反之则关闭...
摘要: 1,函数模板 函数模板即允许多个函数定义简化成用统一的函数定义形式来描述。实际上,函数模板表示了一组同名函数,这些同名函数之间,都是重载函数。 函数模板定义的一般形式是: template &模板参数表& 函数类型标志符 函数名(形式参数列表) { //函数体 } 2,模板函数 函数模板是模板定义,它指明了通用的函数参数。函数模板仅能定义一次,它建立了能在不同数据类型的基础上执行相同操作的通用函数。函数模板定义仅仅是一个形式上的通用函数定义,C++编译器并不为函数模板定义产生任何程序代码。在C++程序中,可以给函数模板的类属类型指定具体的数据类型。C++编译器通过程序中对...
摘要: 一,read 函数从打开的设备或文件中读取数据#include &unistd.h& ssize_t read(int fd, void *buf, size_t count); 返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0 读上来的数据保存在缓冲区buf 中,同时文件的当前读写位置向后移。注意这个读写位置和使用C标准I/O库时的读写位置有可能不同,这个读写位置是记在内核中的,而使用C标准I/O库时的读写位置是用户空间I/O缓冲区中的位置。二,write 函数向打开的设备或文件中写数据 #include <
摘要: core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIGSEGV信号,然后就会core dump)在程序运行的过程中,有的时候我们会遇到Segment fault(段错误)这样的错误。这种看起来比较困难,因为没有任何的栈、trace信息输出。该种类型的错误往往与指针操作相关。往往可以通过这样的方式进行定位。一 造成segment fault,产生core dump的可能原因1.内存访问越界a) 由于使用错误的下标,导致数组访问越界b) 搜索字符串时,依
摘要: 本文主要参考了如下资料⑴hcj写的&Linux静态/动态链接库的创建和使用&地址 http://fanqiang.chinaunix.net/system/linux//4126.shtml⑵雨亦奇的文章&LINUX动态链接库高级应用&地址.cn/htm/center/prog/02_3_13_3_2.asp) 在此一并致谢。 一、为什么要使用库文件 我们在实际编程工作中肯定会遇到这种情况:有几个项目里有一些函数模块的功能相同,实现代码也相同,也是我们所说的重复代码。比如,很多项目里都有一个用户验证
摘要: 原文:/vfdff/33507.html个人总结在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用---- 就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助! 如果不扯得太远的话(比如说操作系统中虚拟内存和物理内存如何运做如何管理之类的知识等),我感觉这篇文章应该是比较全面地谈了一下
摘要: 1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2.如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:BOOL bDontLinger = FALSE;setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinge
摘要: 1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:BOOL bDontLinger = FALSE;setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLing
摘要: 转自:http://blog.csdn.net/qianwenhao/article/details/2160014clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include&stdio.h& 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf 表头文件 #include&stdio.h& 定义函数 int fclose(FILE * stream)
摘要: 1,linux下编译使用mysql c语言API编写的程序报错:gcc testmysql.cpp.c:(.text+0x11): undefined reference to `mysql_init'pp.c:(.text+0x55): undefined reference to `mysql_real_connect'pp.c:(.text+0x65): undefined reference to `mysql_error'pp.c:(.text+0x90): undefined reference to `mysql_close'collect2: l
摘要: 在eclipse中,启动run on server时报错:Resource is out of sync with the file system: ........ 查阅资料后发现这是文件系统不同步的问题,是因为在eclipse之外对工程中的resource进行修改引起的;但是,有时没有在eclipse之外进行修改,也会报类似的错误。解决办法:需要手动刷新一下资源管理器。(1)在eclipse中,工程目录右键,选择F5(refresh)(2)设置eclipse自动刷新。 通过Window-&Preferences --& General --& Workspace,选中Re
摘要: 为什么要了解虚函数表了解虚函数表对理解C++实现多态的机制会有更深的了解,对对象的内存布局会有更好的认识。如要转载请注明作者和本url验证虚函数表的存在(C++中的struct和class实际上是一样的)C++中当一个类中存在virtual函数(虚函数)或者它的父类中存在虚函数,那么编译器就会为这个类生成虚函数表(virtual table),下面我用代码来验证这个事情。首先写一个classclass A{};cout&&sizeof(A)&&输出结果1,就是说这个类占1个字节(具体为什么要占1个字节我也不太清楚,应该就这么设计的吧,有高手请告诉我为什么)。下
摘要: 虚基类 在说明其作用前先看一段代码 class A { public: int iV }; class B:public A { public: void bPrintf(){cout&&&This is class B&&&}; }; class C:public A { public: void cPrintf(){cout&&&This is class C&&&}; }; class D:public B,public C { public: void dPrintf(
摘要: const给人的第一印象就是定义常量。(1)const用于定义常量。 例如:const int N = 100;const int M = 200; 这样程序中只要用到 N、M 就分别代表为整型100、200,N、M 为一常量,在程序中不可改变。 但有人说他编程时从来不用const定义常量。我相信。但他是不懂得真正的编程艺术,用const定义常量不仅能方便我们编程而且能提高程序的清晰性。你是愿意看到程序中100、200 满天飞,还是愿意只看到简单清晰的N、M。相信有没有好处你慢慢体会。 还有人说他不用const定义常量,他用#define宏定义常量。可以。但不知道你有没有发现有时#define
摘要: 对比于C 语言的函数,C++增加了重载(overloaded)、内联(inline)、const 和virtual四种新机制。其中重载和内联机制既可用于全局函数也可用于类的成员函数,const 与virtual 机制仅用于类的成员函数。1.重载(overloaded)重载的理由:1:在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,即函数重载。这样便于记忆,提高了函数的易用性2:类的构造函数需要重载机制。因为C++规定构造函数与类同名构,造函数只能有一个名字。如果想用几种不同的方法创建对象该怎么办?别无选择,只能用重载机制来实现。所以类可以有多个同名的构造函数。重载的实现:它们是
摘要: 多态性给我们带来了好处:多态使得我们可以通过基类的引用或指针来指明一个对象(包含其派生类的对象),当调用函数时可以自动判断调用的是哪个对象的函数。一个函数说明为虚函数,表明在继承的类中重载这个函数时,当调用这个函数时应当查看以确定调用哪个对象的这个函数。普通函数的处理:一个特定的函数都会映射到特定的代码,无论时编译阶段还是连接阶段,编译器都能计算出这个函数的地址,调用即可。虚函数的处理:被调用的函数不仅依据调用的特定函数,还依据调用的对象的种类。通常是由虚函数表(vtable)来实现的。虚函数表的结构:它是一个函数指针表,每一个表项都指向一个函数。任何一个包含至少一个虚函数的类都会有这样一张表
摘要: 作者:gzshun. 原创作品,转载请标明出处! 来源:http://blog.csdn.net/gzshun 在继承过程中,从基类派生出派生类,可能出现重名的成员,包括数据成员或成员函数,这些属于作用域方面的内容。 一、基类的引用或指针访问派生类 基类的引用或指针只能访问派生类中属于基类的部分成员,不能访问派生类的部分,否则就会编译出错。[cpp] view plaincopy#include&iostream&classCBase{public:voidBasePrint()const{cout&&&调用基类的成员函数&
摘要: 相关函数: bcopy(), memccpy(), memmove(), strcpy(), strncpy() 表头文件: #include &string.h& 定义函数: void *memcpy(void *dest, const void *src, size_t n) 函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束 返回值: 返回指向dest的指针 附加说明: 指针src和dest所指的内存区域不可重叠 -
摘要: 表达式的计算分为两种,一种是有副作用的计算,如: (++x)+y 一种是无副作用的计算,如: x*y 有副作用的计算中,子表达式的计算顺序是重要的。例如 (++x)*(x+1) 当x=0时,如果先算++x,上式计算结果为2,如果先算x+1,上式计算结果为1。 再如,对函数g(int,int)的调用g(x,++x),当x=1,这个调用是g(1,2)还是g(2,2)? 所谓“顺序点”,和表达式的副作用紧密相关。再看这个例子: (++i)+(++j) 这个表达式的计算,有两个副作用: i自增1; j自增1; 但是到底哪一个先发生?***是:任何***都不对。 为什么...
摘要: 经过个人查阅相关的资料和理解,现对C语言的位域做一个总结,对于位域的定义我在这里没有多说,我这里主要是对位域有歧义的地方进行系统的总结.我个人觉得总结的比较完整,如有不够完整或有异义的地方大家可以留言指点.1.位域又叫位段(位字段),是一种特殊的结构成员或联合成员(即只能用在结构或联合中),用于指定该成员在内存存储时所占用的位数,从而可以在机内更紧凑地表示数据。2.位域的使用主要出现在如下两种情况:(1)当机器可用内存空间较少而使用位域可以大量节省内存时。如,当把结构作为大数组的元素时。(2)当需要把一结构或联合映射成某预定的组织结构时。例如,当需要访问字节内的特定位时。3. 当要把某个成员说
摘要: C++是一种复杂的编程语言,其中充满了各种微妙的陷阱。在 C++ 中几乎有数不清的方式能把事情搞砸。幸运的是,如今的编译器已经足够智能化了,能够检测出相当多的这类编程陷阱并通过编译错误或编译警告来通知程序员。最 终,如果处理得当的话,任何编译器能检查到的错误都不会是什么大问题,因为它们在编译时会被捕捉到,并在程序真正运行前得到解决。最坏的情况下,一个编译 器能够捕获到的错误只会造成程序员一些时间上的损失,因为他们会寻找解决编译错误的方法并修正。那些编译器无法捕获到的错误才是最危险的。这类错误不太容易察觉到,但可能会导致严重的后果,比如不正确的输出、数据被破坏以及程序崩溃。随着 项目的膨胀,代.
摘要: 指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:&数组名就是指针&。很幸运,我的大学老师就是其中之一。时至今日,我日复一日地进行着C/C++项目的开发,而身边还一直充满这样的程序员,他们保留着&数组名就是指针&的误解。 想必这种误解的根源在于国内某著名的C程序设计教程。如果这篇文章能够纠正许多中国程序员对数组名和指针的误解,笔者就不甚欣慰了。借此文,笔者站在无数对知识如饥似渴的中国程序员之中,深深寄希望于国内的计
摘要: 如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。举个例子来说明一吧,为了让大家更明白一点,比如一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就可以定义一个枚举类型来表示它!enum box{pencil,pen};//这里你就定义了一个枚举类型的变量叫box,这个枚举变量内含有两个元素也称枚举元素在这里是pencil和pen,分别表示铅笔和钢笔。 这里要说一下,如果你想定义两个具有同样特性枚举类型的变量那么你可以用如下的两种方式进行定义.
摘要: #include&stdio.h&#include&stdlib.h&#include&string.h&int main(){char*p;char buf1[256];char buf2[256];char *c;int len=0;FILE*fp1,*fp2;fp1=fopen(&z.txt&,&r&);fp2=fopen(&x.xml&,&w&);while(fgets(buf1,256,fp1)!=NULL){if(buf1[0]=='#'){len=s
摘要: sprintf函数功能:把格式化的数据写入某个字符串 头文件:stdio.h函数原型:int sprintf( char *buffer, const char *format [, argument] … ); 返回值:字符串长度(strlen)字串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况,通常用眼睛再把出错的代码多看几眼就看出来了。fprintf C /C++中的一个格式化写--库函数;其作用...
摘要: 原型:char *strsep(char **stringp, const char *delim); 功能:***字符串为一组字符串。从stringp指向的位置起向后扫描,遇到delim指向位置的字符后,将此字符替换为NULL,返回stringp指向的地址。 strsep函数,这在 Windows Dev-C++ 是没有支持的,在写 UNIX 分析字符串常常需要利用到此函式,大家可以 man strsep来看如何使用 strsep,假设我们要分析 URL Get 字符串:user_command=appleboy&test=1&test2=2,就可以利用两次 strsep 函式
摘要: 一,流与缓冲 流I/O是由C语言的标准函数提供的,这些I/O可以替代系统中提供的read和write函数。事实上流I/O的内部封装了这两个基本的文件读写系统调用。使用流I/O在某些程度上来讲要方便一些,这些I/O在效率上没有特别大的差异。 基于流的操作最终会调用read或者write函数进行操作。为了使程序的运行效率最高,流对象通常会提供缓冲区,以减少调用系统I/O库函数的次数。 基于流的I/O提供以下2种缓冲:1,全缓冲:直到缓冲区填满,才调用系统I/O函数。对于读操作来说,直到读入的内容的字节数等于缓冲区大小或者文件以经到达结尾,才进行I/O操作将外存文件内容读入缓冲区;对于写操作来说,.
摘要: 1,inode中保存哟普文件内容的块号码,Linux内核进行读写操作时,会根据inode中的盘块号码来操作相应的盘块,完成对文件的读写。mv命令用于移动一个文件,即使要移动的文件很大,其移动速度也很快,原因是mv命令没有移动文件内容而是改变了文件的目录项。该命令在新的目录下创建一个新的目录项,并将其指向原来的文件即可。2,Linux环境使用Link函数创建一个硬链接,其函数原型:int link(const char *path1,const char*path2),第一个参数是现有文件名,第二个参数是新的目录项。Linux文件系统不允许普通用户创建一个链接到目录的硬链接,因为这样可能会导致文
摘要: real user ID:实际用户ID,指的是进程执行者是谁effective user ID:有效用户ID,指进程执行时对文件的访问权限saved set-user-ID:保存设置用户ID,作为effective user ID的副本,在执行exec调用时后能重新恢复原来的effectiv user ID.上面这三个ID是相对于进程而言的.set-user-ID:设置用户ID,这是相对于文件来说的.设置了set-user-ID位的可执行程序,执行时,进程的effective user ID与saved set-uesr-ID都为程序文件所属用户的ID,些时real user ID与effec
摘要: 线程的栈是线程的私有数据,这部分内容是不共享的。在一个进程内有多个线程,这些线程都有自己的栈,但是又都要挤在进程的虚拟地址空间内。线程之间的栈内存必须保证彼此不冲突线程才能正确地运行。因此,虽然大多数情况下,由系统为用户设置和线程的栈内存,但有些时候还是需要用户亲自对线程进行设置。 线程基本属性中和线程栈有关的属性有三个,分别是线程栈的大小、线程栈的最低地址和线程栈末尾警戒区的大小。 系统默认为一个新建的线程提供PAGESIZE个字节的栈空间,但是很多时候需要更改此值。有时候该线程栈可能会不够用,例如,线程体函数是一个多层递归函数,该函数的特点就是需要多层嵌套栈来保存执行过程,因此,该函数可.
摘要: fopen()、fdopen()、close()日 星期日 12:58Linux环境下可以使用下列函数打开一个流,其函数原型如下: #include &stdio.h& FILE * fopen(const char * restrict pathname, const char * restrict type); FILE * fdopen(int filedes, const char *type); fopen函数的第1个参数表示需要打开文件的路径,第2个参数type表示打开的方式,该值以一个字符串的形式传入, type 字串中包含字母a的表示&
摘要: 3.VFSLinux支持各种各样的文件系统格式,如ext2、ext3、reiserfs、FAT、NTFS、iso9660等等,不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式,然而这些文件系统都可以mount到某个目录下,使我们看到一个统一的目录树,各种文件系统上的目录和文件我们用ls命 令看起来是一样的,读写操作用起来也都是一样的,这是怎么做到的呢?Linux内核在各种不同的文件系统格式之上做了一个抽象层,使得文件、目录、读写访 问等概念成为抽象层的概念,因此各种文件系统看起来用起来都一样,这个抽象层称为虚拟文件系统(VFS,Virtual Filesystem)。上一节我们介绍了一
摘要: 虚拟内存---linux操作系统采用虚拟内存管理技术,使得每个进程都有独立的进程地址空间,该空间是大小为3G,用户看到和接触的都是虚拟地址,无法看到实际的物理地址。利用这种虚拟地址不但能起到保护操作系统的作用,而且更重要的是用户程序可使用比实际物理内存更大的地址空间。linux将4G的虚拟地址空间划分为两个部分------用户空间和内核空间。用户空间从0----0xbfffffff,内核空间从3G----4G。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间。例外情况是用户进程通过系统调用访问内核空间。进程空间----用户空间对应进程,所以每当进程切换,用户空间就会跟着变化。每个
摘要: 用printf()输出时是先输出到缓冲区,然后再从缓冲区送到屏幕上。那什么情况下才会将缓冲区里的内容送到屏幕上呢?一,使用fflush(stdout)强制刷新。二,缓冲区已满。三,scanf()要在缓冲区里取数据时会先将缓冲区刷新。四,\n,\r进入缓冲区时。五,线程结束的时候,如果该线程里也有printf(....);六,程序结束时。#include&stdio.h&#include&stdlib.h&int main(){int i=89;printf(&--------------\n&);//输出-----------后不会立即输
摘要: 一般来说,Posix的线程终止有两种情况:正常终止和非正常终止。线程主动调用pthread_exit()或者从线程函数中return都将使线程正 常退出,这是可预见的退出方式;非正常终止是线程在其他线程的干预下,或者由于自身运行出错(比如访问非法地址)而退出,这种退出方式是不可预见的。不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因运行出错而退出的前提下,如何保证线程终止时能顺利的释放掉自己所占用的资源,特别是锁资源,就是一个必须考虑解决的问题。最经常出现的情形是资源独占锁的使用:线程为了访问临界资源而为其加上锁,但在访问过程中被外界取消,如果线程处于响应取消状态,且采用
摘要: 面向对象语言C++的基本特征是封装、继承、多态,其实这些用C语言同样可以实现。封装可以用结构体来实现,继承可以用包含来实现,这些都好说,下面我用代码重点说一下如何用C语言实现C++的多态。typedef struct Animal{void (*show) ();}CAvoid showpig(){cout&&__FUNCTION__&&}void showbird(){cout&&__FUNCTION__&&}void showdog(){cout&&__FUN
摘要: 指针在声明的时候可以用关键字restrict修饰,如 int * 将告诉编译器,指针p是访问p所指对象的唯一方式
摘要: C语言操作符优先级优先级运算符含 义要求运算对象的个数结合方向1()[]-&.圆括号下标运算符指向结构体成员运算符结构体成员运算符自左至右2!逻辑非运算符1(单目运算符)自右至左~按位取反运算符++自增运算符--自减运算符-负号运算符(类型)类型转换运算符*指针运算符&地址与运算符sizeof长度运算符3*/%乘法运算符除法运算符求余运算符2(双目运算符)自左至右4+-加法运算符减法运算符2(双目运算符)自左至右5&&&&左移运算符右移运算符2(双目运算符)6&&=&&=关系运算符2(双目运算符)自左至右7==!=等于运算符不等于运
摘要: int main(int argc,char * argv[])argv为指针的指针argc为整数char **argv or: char *argv[] or: char argv[][]main()括号内是固定的写法。下面给出一个例子来理解这两个参数的用法:假设程序的名称为prog,当只输入prog,则由操作系统传来的参数为:argc=1,表示只有一程序名称。argc只有一个元素,argv[0]指向输入的程序路径及名称:./prog当输入progpara_1,有一个参数,则由操作系统传来的参数为:argc=2,表示除了程序名外还有一个参数。argv[0]指向输入的程序路径及名称。argv[
摘要: 1. 概述***L树是最早提出的自平衡二叉树,在***L树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。***L树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis。***L树种查找、插入和删除在平均和最坏情况下都是O(log n),增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。本文介绍了***L树的设计思想和基本操作。2. 基本术语有四种种情况可能导致二叉查找树不平衡,分别为:(1)LL:插入一个新节点到根节点的左子树(Left)的左子树(Left),导致根节点的平衡因子由1变为2(2)RR:插入一个新节点到根节点的右子树(Right)的右子树
摘要: 本贴涉及的硬件平台是X86,如果是其它平台,嘻嘻,不保证能一一对号入座,但是举一反三,我想是完全可行的。 一、概念 物理地址(physical address) 用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。 ----这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到 最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是“与 地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理..
摘要: 《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址,即是小端字节序;大端存在起始地址,即是大端字节序废话就不说了,直接代码#include&stdio.h&union key{char s[2];}Q;int main(){Q.a=0x4142;printf(&%c\n%c&,Q.s[0],Q.s[1]);return 0;}执行结果:B A。X86体系是小端模式的,比如0X8975,则89存在大地址端,而75存在小地址端,与我们习惯相近。由于union共享内存,所以就输出了B A
摘要: 一,内存对齐1,分析需不需要对齐,只需要看到底会不会影响访问次数。2,内存对齐是一种典型的空间换时间的方法。3,对齐的原则是: 1)结构体变量的首地址能够被其最宽基本类型成员的大小所整除; 2)结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding); 3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。struct SByte1 { // 偏移量0~7 // 偏移量8 ...
摘要: 一,符号解析规则声明表示告知编译器该变量的存在,如:而定义不仅告知编译器该变量的存在,还同时为该变量赋值,如:int a=9;在声明时不为该变量分配存储空间,定义时会为其分配内存空间。当该变量在其作用域内只有声明没有定义时,编译器会自动将第一个声明认为是该变量的定义,如:int f(int b){//此时由于在该函数内找不到a的定义,因此该声明被认为是变量的定义,分配了四个字节的内存空间a=3;//此时不是定义,而是赋值。return a+b;}对结构体的赋值,比如typedef struct{} SS;SS i={3};//正确,用{3}对结构体i进行初始
摘要: 回调函数的另一个典型的作用是实现类似C++的泛型算法。如qsort的实现等等。 下面是我利用回调函数的特性来写的一个泛型函数,该函数的功能是在任意一组对象中求出其最大值,该对象可以是char型,也可以是int型......不多说了,直接看程序吧:#include &stdio.h&typedef int (*cmp_t) (void*, void*);/* 回调函数1: 对比的是char类型对象 */int cmp_char_data(void* a, void* b){ char para1 = *((char*)a); char para2 = *((char*)b); if(
摘要: 最近一直在读《linux c 程序设计大全》(吴岳),收获颇丰啊。一,指针与别名直接上代码,代码一void f1(int*p,int*q){*p=2**q;}代码二,void f2(int*p,int*q){*p+=*q;*p+=*q;}这两段代码当然是第一个的效率高,代码一访问两次存储器,代码二访问四次存储器。不过这只是题外话^O^,真正要说的是这里面的陷阱。假设p指向a(a=3),q指向b(b=3),调用这两个函数的得到的功能一样,都变成了9,但是如果p和q同时指向a(a=3),这时调用f1,a变成了9,调用f2,则a变成了12!二,数组的指针,依然直接看代码#include&std
摘要: 今天用extern突然发现了extern的另一个特点。比如,现在operator.c里面有个全局数组变量int arr[5],和三个函数f1,f2,f3.#include&stdio.h&#define MAX 5int arr[MAX]={2,3,4,5,6};int sum(){ int i,n;n=0;for(i=0;i&MAX;i++){ n+=arr[i];}}int get_max(){i=0;max=arr[i];for(i=0;i&MAX;i++){ if(arr[i]&max)max=arr[i];
摘要: 函数的本质是一段二进制代码,这些代码是可以直接被机器执行的指令。在翻译为汇编语言时,函数被翻译成一段相对独立的代码,并且使用函数名作为编号,表示此段代码的入口。当程序调用该函数时,只需要转到该入口就可以了。因此函数名的值等于内存中存储该代码段的首地址 函数在调用时会使进程空间中的栈不断增长,从当前进程空间中的栈顶的位置到函数保存返回地址的位置,这块内存称为函数的栈帧,所有函数的局部变量都保存在栈帧上,当函数结束调用时这块栈真就消失了,全局变量保存在数据段.下面看看怎么取出栈里的数据吧,#include&stdio.h&void fun(int a,...){ int *p=&

参考资料

 

随机推荐