c/c++细节知识整理
文章平均质量分 79
hjf161105
业精于勤荒于嬉,行成于思毁于随
展开
-
c/c++整理--引用和指针(4)
一、指针数组和数组指针的区别解析: 指针数组指用于存放指针的数组,存放同一类型的指针,例:int *a[10];数组a中存放了10个int*型变量,在栈区分配了10个int*的空间,数组存放10个int型数据的地址。 数组指针指指向一个数组的指针,例:int *b = new int[10];指针b指向在堆中分配的10个int型数据大小的内存区,注意,这个时候释放空间一定要原创 2017-04-07 22:56:31 · 209 阅读 · 0 评论 -
c/c++整理--位运算与嵌入式编程(1)
一、位制转换#include int main(){ int i = 5.01; float f = 5; printf("%f\n", 5); printf("%lf\n", 5.01); printf("%f\n", f); printf("%d\n", 5.01); printf("%d\n", i); return 0;}32位平台中,int和floa原创 2017-05-06 23:43:17 · 378 阅读 · 0 评论 -
c/c++整理--位运算与嵌入式编程(3)
一、看代码写输出——整数的自动转换void foo(void){ unsigned int a = 6; int b = -20; if(a+b > 6) { puts(">6"); } else { puts("<=6"); }}这里需要注意的是,无符号数与有符号数之间运算的时候,有符号数要转换成无符号数再进行运算。这里很显然,-20转换成一个无符号数后是一个非常原创 2017-05-09 23:48:01 · 416 阅读 · 0 评论 -
c/c++整理--c++面向对象(1)
一、描述面向对象技术的基本概念面向对象是指按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的方法,包括类、对象、消息以及类的特性等方面的内容。类(class):具有相似的内部状态和运动规律的实体集合。类来自于人们认识自然、认识社会的过程。在这一过程中,人们主要使用两种方法:有特殊到一般的归纳法和一般到特殊的演绎法。在归纳过程中,从一个一原创 2017-05-16 22:40:27 · 415 阅读 · 0 评论 -
c/c++整理--c++面向对象(2)
一、看代码写结果——c++类成员的访问#include using namespace std;#define public private (1)class Animal{public: (2) void MakeNoise();};int main(){ Animal animal; animal.MakeNoise(); (3) return 0原创 2017-06-05 23:40:07 · 400 阅读 · 0 评论 -
c/c++整理--析构函数
c++中虚析构函数的作用是什么? 析构函数是为了在对象不被使用后释放它的资源,虚函数是为了实现多态。那么,把析构函数声明为virtual有什么作用呢? 请看下面代码:#include using namespace std;class Base{public: Base(){ } //Base的构造函数 ~Base() //Base的析构函数 { cout原创 2017-06-28 20:42:34 · 282 阅读 · 0 评论 -
c/c++整理--c++面向对象(3)
一、与全局对象相比,使用静态数据成员有什么优势优势:(1)静态数据成员没有进入程序的全局命名空间,因此不存在程序中其他全局命名冲突的可能性。(2)使用静态数据成员可以隐藏信息。因为静态数据成员可以是private成员,而全局对象不能二、有哪几种情况只能用intialization list,而不能用assignment 无论是在构造函数初始化列表中初始化成员,原创 2017-06-11 00:05:53 · 290 阅读 · 0 评论 -
c/c++整理--c++面向对象(4)
一、对静态数据成员的正确描述下列对静态数据成员的描述中,正确的是A、静态数据成员可以在类体中进行初始化B、静态数据成员不可以被类的对象调用C、静态数据成员不能收private控制符的作用D、静态数据成员可以直接用类名调用解析:A错误。静态数据成员必须在类外面初始化,以示与普通数据成员的区别B错误CD正确二、main函数执行前还会执行什么代码#in原创 2017-06-11 22:33:20 · 332 阅读 · 0 评论 -
c/c++整理--函数重载
一、为什么C语言不支持函数重载而c++能支持什么是函数重载?为什么C语言不支持函数重载,而c++能支持函数重载?解析: 函数重载是用来描述同名函数具有相同或者相似的功能,但数据类型或者是参数不同的函数管理操作。在C语言里需要写两个不同名称的函数来进行区分。int add1(int a, int b){ return a+b;}float add2(float a, f原创 2017-07-12 20:59:28 · 452 阅读 · 0 评论 -
c/c++整理--类String的构造函数、析构函数和赋值函数
类string的原型class string{public: string(const char* str = NULL); //普通构造函数 string(const string &other); //复制构造函数 ~string(void); //析构函数 string & operater = (const string &other); //赋值函数pri原创 2017-07-03 22:47:03 · 460 阅读 · 0 评论 -
c/c++整理--重载运算符
一、编写MyString类对于下面的类MyString,要求重载一些运算符后可以计算表达式a=b+c。其中,a、b、c都是类MyString的对象。请重载相应的运算符并编写程序测试。class MyString{ char* str;public: MyString(char* s) { str = new char(strlen(s)+1); strcpy(st原创 2017-07-13 21:03:19 · 659 阅读 · 0 评论 -
c/c++整理--复制构造函数和深复制及浅复制
一、复制构造函数是什么?什么是深复制和浅复制?什么是复制构造函数 先来说明什么是复制构造函数,以及它被调用的场合。 复制构造函数是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构件及初始化。 如果在类中没有显示地声明一个复制构造函数,那么编译器会私下里制定一个函数来进行对象之间的位复制。这个隐含的复制构造函数简单地关联了所有的类成员。 在c++中,下原创 2017-07-06 12:59:11 · 608 阅读 · 0 评论 -
c/c++整理--c++面向对象(5)
构造函数的使用以下代码中的输出语句为0吗?为什么?#include using namespace std;struct CLS{ int m_i; CLS(int i):m_i(i){ } CLS() { CLS(0); }};int main(){ CLS obj; cout<<obj.m_i<<endl; return 0;}在代码第11行,不原创 2017-06-28 00:04:52 · 661 阅读 · 0 评论 -
c/c++整理--c++面向对象(6)
一、了解c++类各成员函数的关系写出下面代码的输出结果#include using namespace std;class A{ int num;public: A() { cout<<"Default constructor"<<endl; } ~A() { cout<<"Desconstructor"<<endl; cout<<num<<endl;原创 2017-07-07 20:25:01 · 506 阅读 · 0 评论 -
c/c++整理--私有继承
一、私有继承有什么作用#include using namespace std;class Person{public: void eat() { cout<<"Person eat"<<endl; }};class Student : private Person //私有继承{public: void study() { cout << "Student Stu原创 2017-07-20 19:50:02 · 417 阅读 · 0 评论 -
c/c++整理--静态成员和临时对象
一、看代码写结果——c++静态成员和临时对象#include using namespace std;class human{public: human() { human_num++; } static int human_num; ~human() { human_num--; print(); } void print() { cout<<"原创 2017-07-09 20:55:58 · 444 阅读 · 0 评论 -
c/c++整理--虚函数
一、虚函数是这么实现的解析: 简单的说,虚函数是通过虚函数表实现的,那么什么是虚函数表呢? 事实上,如果一个类中含有虚函数表,则系统会为这个类分配一个指针成员指向一张虚函数表(vtbl),表中每一项指向一个虚函数的地址,实际上就是一个函数指针的数组。为了说明虚函数表,请看程序:class Parent{public: virtual void foo1() {} vir原创 2017-07-21 20:53:18 · 390 阅读 · 0 评论 -
c/c++整理--位运算与嵌入式编程(2)
一、计算一个字节中有多少bit被置1#include int main(){ unsigned char c = 0; int count = 0, i = 0; scanf("%d", &c); unsigned char t = 0x01; for(i = 0; i < 8; i++) { if((c & t) == t) { count++;原创 2017-05-07 23:55:03 · 351 阅读 · 0 评论 -
c/c++整理--字符串(5)
一、反转字符串,但其指定的子串不反转给定一个字符串、一个这个字符串的子串,将第一个字符串反转,但保留子串的顺序不变。例如:第一个字符串:Welcome you, my friend子串:you输出:dneirf ym,you emocleW#include #include #include #include using namespace std;原创 2017-04-25 22:18:06 · 412 阅读 · 0 评论 -
c/c++整理--引用和指针(5)
一、什么是“野指针” “野指针”不是NULL指针,而是指向“垃圾”内存的指针,其成因主要为:指针变量没有被初始化,或指针p被free或者delete之后,没有置为NULL。二、“野指针”的危害下面程序有什么重大的bug?short *bufptr;short bufarray[20];short var = 0x20;*bufptr = var;bufarra原创 2017-04-08 22:03:28 · 248 阅读 · 0 评论 -
c/c++整理--内联函数
一、为什么要引入内联函数 引入内联函数的主要目的是,用它代替C语言中表达式形式的宏定义。C语言中可以使用宏定义:#define SUM(a, b) (a+b)*(a-b)这种宏定义在形式上像一个函数,但它没有了参数压栈,代码生成等一系列操作,因此效率很高。这种宏定义在形式上类似于函数,但在使用时仅仅只是做预处理器符号表中的简单替换,因此不能进行参数有效性的检测,原创 2017-03-30 17:40:02 · 340 阅读 · 0 评论 -
c/c++整理--sizeof和strlen
一、使用sizeof计算普通变量所占空间大小 计算结果:(假设32位win)char str[] = "hello";char *p = str;int n = 10;sizeof(str) = ____;sizeof(p) = ____;sizeof(n) = ____;void func(char str[100]){ sizeof(str) = ___;}voi原创 2017-03-27 23:36:02 · 613 阅读 · 0 评论 -
c/c++整理--const和static关键字
一、改错——const的使用 const使用时的注意点#include int main(){ const int x = 1; int b = 10; int c = 20; const int* m = &b; int* const n = &b; const int* const s = &b; x = 2; m = &c; *m = 1;原创 2017-03-26 23:54:31 · 272 阅读 · 0 评论 -
c/c++整理--预处理
一、预处理的使用#ifdef、#else、#endif在程序中的使用。看代码写输出:#include #include #define DEBUGint main(){ int i = 0; char c; while(1) { i++; c = getchar(); if(c != '\n') { getchar(); } if(原创 2017-03-25 23:58:06 · 387 阅读 · 0 评论 -
c/c++整理--程序基础
一、一般赋值语句 一般赋值语句的概念和方法。求下程序输出:#includeint main(){ int x, y = 3, z = 4; x = (y = z); printf("x = %d\n", x); x = (y == z); printf("x = %d\n", x); x = (y | z); printf("原创 2017-03-24 23:12:59 · 597 阅读 · 0 评论 -
c/c++整理--引用和指针(1)
一、一般变量引用看代码写输出原创 2017-04-03 23:05:06 · 302 阅读 · 0 评论 -
c/c++整理--引用和指针(2)
一、参数引用的常见错误找错#include using namespace std;class Test{public: void f(const int& arg);private: int value;};void Test::f(const int& arg){ arg = 10; cout<<"arg = "<<arg<<endl; value =原创 2017-04-04 20:47:56 · 267 阅读 · 0 评论 -
c/c++整理--字符串(3)
一、编程实现字符串中各单词的翻转编写函数实现“I am from Shanghai”倒置为“Shanghai from am I”,即句子中的单词倒置,而不改变单词内部的结构。原创 2017-04-17 23:34:38 · 303 阅读 · 0 评论 -
c/c++整理--字符串(1)
一、使用库函数将数字转化为字符串C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字任意转化为字符串。(1)itoa(): 整型 转化为 字符串(2)ltoa(): 长整型 转化为 字符串(3)ultoa():无符号长整型 转化为 字符串(4)gcvt(): 浮点型 转化为 字符串(5)e原创 2017-04-10 22:52:13 · 407 阅读 · 0 评论 -
c/c++整理--引用和指针(3)
一、找错——内存访问违规#include using namespace std;int main(){ char a; char *str1 = &a; char *str2 = "AAA"; strcpy(str1, "hello"); cout<<str1<<endl; str2[0] = 'B'; cout<<str2<<endl; return 0;原创 2017-04-06 20:13:07 · 413 阅读 · 0 评论 -
c/c++整理--字符串(4)
一、将十进制数转化为二进制和十六进制形式输出不使用printf系列库函数,通过位运算将十进制数以二进制和十六进制形式的字符串输出。#include #include #define N 32#define M 10char sel[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};原创 2017-04-19 23:21:05 · 1440 阅读 · 0 评论 -
c/c++整理--实现删除字符串所有指定字符
编程实现删除字符串中所有指定的字符示例输入:cabcdefcgchci示例输出:abdefghi#include #include #define N 20char* deleteChar(char* bef, char c);int main(){ char c, i = 0, j = 0; char bef[N] = {0}; char *aft; pri原创 2017-05-11 23:55:34 · 5604 阅读 · 0 评论 -
c/c++整理--实现任意长度正整数相加
编程实现任意长度的两个正整数相加 c/c++中有int、float、double等数据类型,但是它们的长度是有限的,现在要求可以是任意长度的正整数相加,这里可以使用字符串来表示数字,结果也是用字符串表示。这里的难点主要就是做加法运算时要考虑进位。#include #include #include #include char* addBigInt(char* num1, cha原创 2017-05-03 23:03:15 · 4561 阅读 · 1 评论 -
c/c++整理--字符串(2)
一、改错——数组越界试题1#include #include int main(){ char string[10]; char* str1 = "0123456789"; strcpy(string, str1); return 0;} 这题str1有11个元素,string只有10个元素,拷贝的时候,内存不够,数组越界,会出现错误。原创 2017-04-16 00:06:01 · 269 阅读 · 0 评论 -
c/c++整理--编程计算含有汉字的字符串长度
编写gbk_strlen函数,计算含有汉字的字符串长度,汉字作为一个字符处理;已知:汉字编码为双字节,其中首字节#include #include using namespace std;int gbk_strlen(const char* str){ const char* p = str; //p用于后面遍历 while(*p) //若是结束符0,则结束循环原创 2017-05-14 23:52:59 · 8721 阅读 · 4 评论 -
c/c++整理--c++继承
一、c++继承关系理解请考虑下面标记为A~J的语句在编译时可能出现的情况,如果能够成功编译,请记为“RIGHT”,否则即为“ERROR”#include using namespace std;class Parent{private: int m_nPrt;protected: int m_nPtd;public: int m_nPub;public: Pare原创 2017-07-18 23:49:33 · 327 阅读 · 0 评论