- 博客(21)
- 收藏
- 关注
原创 不用循环和递归打印1-99
#include <stdio.h>#define A(x) x;x;x;x;x;x;x;x;x;x;int main (void){ int n = 1; A(A(A(printf ("%d ", n++)))); return 0;}
2020-07-09 17:14:37
297
原创 sizeof的应用
Windows 32位C++程序,请计算sizeof的值(1)void Func(char str[100]){ sizeof(str) =?}(2)void* p =malloc(100);sizeof(p);(3)int a[100];sizeof(a) ;(4)char *p ="aaaaaaa";sizeof(p);答案:(1)100 (2)4 (3)400 (4)4注:当指针p指向的区域是栈区的时候,size
2020-07-09 17:14:07
228
原创 关于指针申请malloc空间
char *ptr =(char*)malloc(0);if(ptr ==NULL){ cout<< "得到NULL指针" << endl;}else{ cout <<"等到非空指针" <<endl;}答案是:得到NULL指针注:创建指针时用到malloc就算分配内存为0,只要内存足够,系统会自动随机分配空间的。可以创建成功!...
2020-07-09 17:11:57
1003
原创 数组地址与指针
int a[5] ={1,2,3,4,5};int* ptr =(int*)(&a+1);printf("%d,%d",*(a+1),*(ptr-1))答案是: 2,5注:&a 是指取整个数组的地址,&a+1就是跳过整个数组 到下一块地址*(ptr-1)就是数组的最后一位;a表示数组的首地址 a+1表示a[1]元素;...
2020-07-09 17:10:49
439
原创 int id[sizeof(unsigned long)]这样定义数组可以不可以
答案是可以的,这个sizeof是编译时运算符,编译时就确定了,可以看成和机器有关的常量。
2020-07-09 17:09:38
891
原创 链表和静态数组的区别
数组大小固定,不合适动态存储,动态添加,内存为已连续的地址,可随机访问,查询较快。链表大小可便,扩展性强,只能顺着指针的方向查询,速度较慢
2020-07-09 17:09:03
385
转载 动态库和静态库的区别
区别:静态库和动态库最本质的区别就是:该库是否被编译进目标(程序)内部。分别介绍:静态(函数)库:一般扩展名为(.a或者.lib),这类的函数库通常扩展名为libxxxx.a或xxx.lib。这类库在编译的时候会直接整合到目标程序中所以利用静态函数库编译成的文件会比较大,这类函数库最大的有点就是编译成功的可 执 行文件可以独立于运行,而不再需要向外部要求读取函数库的内容;但是从升级难易度来看明显没有优势,如果函数库更新,需 要重新编译。动态(函数)库动态函
2020-07-08 15:56:36
576
原创 3.C++是不是类型安全?
答案是不安全的。但如果C++使用得当,它将远比C更有类型安全性,相比于C,C++提供了一些新的机制保障类型安全:(1)操作符new返回的指针类型严格与对象匹配,而不是void*;(2)C中很多以void* 为参数的函数可以改写为C++模板函数,而模板是支持类型检查的;(3)引入const关键字代替 #define constants,他是有类型、作用域的,而#define constants这是简单的文本替换;(4)一些#define宏可被改写成为inline函数,结合函数的重载,可在类型安全的前
2020-07-08 15:53:24
661
原创 重载(overload)和重写(overried)、重定义的区别
C++提供的四个缺省函数:默认构造函数,拷贝构造函数(浅拷贝),析构函数,赋值函数重载(overload)函数名相同,函数的参数个数、参数类型或参数顺序三者中必须至少有一种不同。函数返回值的类型可以相同,也可以不相同。发生在一个类内部。重定义也叫做隐藏,子类重新定义父类中有相同名称的非虚函数(参数列表可以不同),指派生类的函数屏蔽了与其同名的基类函数。可以理解成发生在继承中的重载。重写也叫做覆盖,一般发生在子类和父类继承关系之间。子类重新定义父类中有相同名称和参数的虚函数总结1.成员函数重载
2020-07-08 15:51:46
382
原创 1.为什么构造函数不能有返回值?
构造函数的调用之所以不设返回值,是因为构造函数的特殊性决定的。从基本语义角度来讲,构造函数返回的应当是所构造的对象。否则,我们将无法使用临时对象:::如果C的构造函数可以有返回值,比如int;int C( ):x_( 0){ return 1; // 1表示成功,0表示失败!}当 C c= C( );此时c.x_ ==1很明显,c()调用了C的无参构造函数。该构造函数返回值int值1。恰好C有一个带参数构造函数C(int i)。于是,混乱来了。按照C++的规定,C c=C(){};
2020-07-08 15:49:12
2836
原创 将int转换成char
目前一共有三种方法:1.itoa函数 (这种方法不是c与c++库中原有函数,有的可能使用不了)2.循环取余算法(进制转换之类的也是)3.sprint(sql,“”,i)函数
2020-07-08 15:48:05
2591
1
原创 字符串有关知识
字符串的赋值char *str = "hello"; //编译也能通过运行正常(但是在g++中编译警告:建议前面加const)最新的编译器是会报错的 char str[] ="hello"; // 这个是最合法的写法字符串的问题主要是考察内存的理解**“hello”**字符串是存在文字常量区,str指针存放在栈区代码示例:#include <stdio.h>int main(){ char str1[] ="hello"; *(str1+1)
2020-07-08 15:47:24
137
原创 类指针的强制转换
动态转换 dynamic_cast只能从上转换至下eg:从父类指针转换成子类的指针 否则报错class B{public: virtual void test() { } virtual ~B() { }};class D :public B{ int i;public: D() { i =99; } voi
2020-07-08 15:44:49
819
原创 符号位(强制类型转换)
在计算机里面:正数的源码和补码相同负数在源码的基础上应该先转换成补码源码 = 补码 -1 再取反补码 = 源码 取反 +1例1:int main(){ short int a =129; char b =a; printf("%d\n",b); return 0;}Result: -127过程:源码(补码):1000,0001减一取反: 1111,1111(127)例2:int main(){ sh
2020-07-08 15:40:07
657
原创 多态案例--制作饮品
制作饮料的大致流程为:煮水-冲泡-倒入杯中-加入辅料利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶具体实现代码using namespace std;class Drinking{public: //zhushui virtual void Boil() =0; //chongpao virtual void Brew() =0; //daorubeizhong virtual void P
2020-07-08 15:37:30
290
原创 进制转换器!
基于类中栈模拟出 进制转换器 输出位字符组成的字符串:主要运用到了循环取余的算法#include <cstdio>#include <iostream>#include <cmath>#include <cstring>using namespace std;template<typename T>class Stack{public: Stack(int size =10) {
2020-07-08 15:36:38
292
原创 异常处理
异常处理的语法如果某段程序发现了自己不能或不想处理的异常,就可以使用throw表达抛出这个异常。将它抛给调用者。throw 的操作数表示异常类型,语法上与return操作数相类似。如果程序中有多种要抛出的异常,应该用不同的操作数类型来互相区别。try子句后的复合语句是受保护的代码段。如果预料某段程序代码或对某函数的调用可能发生异常,就将它放在try块中。如果这段代码运行时真的发生异常,其中throw表达式就会抛出这个异常。catch子句时异常处理函数,捕获由throw表达式抛出的异常。异常声明部分指明
2020-07-01 13:51:17
128
原创 用类来模拟(栈)操作
用类来模拟(栈)操作#include <cstdio>#include <iostream>#include <cmath>#include <cstring>using namespace std;template<typename T>class Stack{public: Stack(int size =10) { MAX_SIZE =10;
2020-07-01 11:32:11
232
原创 模板
模板参数化多态,就是将程序所处理的对象的类型参数化,使得一段程序可以用于处理多种不同类型的对象。两个函数只有参数类型不同,功能完全相同(函数体一样)。如果能写一段通用代码,能适合多种不同数据类型,便会使代码的可重用性大大提高,从而提高软件的开发效率。使用函数模板可以实现这一目的。程序员只需要对函数模板编写一次,然乎基于调用函数时提供的参数类型,C++编译器将自动产生相应的函数来正确处理该类型的数据。#include <cstdio>#include <iostream>#i
2020-07-01 11:27:05
135
原创 前++和后++运算符的重载
#include <cstdio>#include <iostream>#include <cmath>#include <cstring>using namespace std;class Complex{public: Complex(){} Complex(int r, int v):r(r),v(v){} friend ostream& operator<<(ostream&a
2020-07-01 11:23:57
359
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人