C语言
孤傲小二~阿沐
谁终将声震人间,必长久深自缄默;
谁终将点燃闪电,必长久如云漂泊。
PostgreSQL内核开发 数据库领域潜力新星 CSDN博客专家
展开
-
2019年4月18日 关于使用断言assert的简易说明(一)
断言就是对某种假设条件进行检查。在 C 语言中,断言被定义为宏的形式(assert(expression)),而不是函数,其原型定义在<assert.h>文件中。其中,assert 将通过检查表达式 expression 的值来决定是否需要终止执行程序。也就是说,如果表达式 expression 的值为假(即为 0),那么它将首先向标准错误流 stderr 打印一条出错信息,然后再通...原创 2019-04-18 13:46:27 · 909 阅读 · 0 评论 -
scanf printf gets puts
int main(){ char str1[20] = { "hello world!" };//数组 在栈上开辟20字节 未初始化的为0 char *sp = "hello world!";//指针(在栈上)指向数据区的字符串常量(只读) char str2[30], str3[30]; //char *sp = gets(str2);sp的值为str2,sp指向这个数组 sca...原创 2019-05-18 19:51:23 · 244 阅读 · 0 评论 -
文件系统
文本文件:存放在内存的数据转换成相对应的ASCI字符。二进制文件:内存里怎么存的,磁盘里也是怎么存的。(不需要转换)其读写要快:无须转化对文件的操作:open read write close。int main(){ FILE *fp1 = fopen("test1.txt", "w");//失败返回NULL 成功 FILE *fp2 = fopen("test2.txt", ...原创 2019-05-22 22:16:11 · 189 阅读 · 0 评论 -
C++学习第一节:深入编译链接和运行
1<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<...原创 2019-05-12 18:47:09 · 1568 阅读 · 12 评论 -
C++学习第五节:C和C++的区别第三节课
Note1:const * & 在函数返回值的应用const 在C语言中修饰的量:常变量。不能在需要常量的地方充当常量。和普通变量的唯一区别:就是它不能作为左值仅此而已。const 在C++语言中修饰的量:如果给的初始值是个明确的值(立即数 不用在运行时计算的)是常量,所有用到常量名字的地方都会被替换成常量的初始值。常量在初始值是个编译阶段不能计算出来的数据,就退化成常变量。...原创 2019-05-15 17:13:16 · 257 阅读 · 0 评论 -
C++学习第四节:C和C++的区别第二节课
Note1:const 和 一级指针的结合两种方式:C++ 里const修饰的是离他最近的类型 类型 类型!!!(1):const int p;//这个 类型是int,修饰的p是个常量(不可以作为左值),但p可以被更改。p可以指向其他的整型变量,但是不能给指针解引用赋值,试图通过指针去修改它所指向的内存的值。int const p;//这个 类型是int,修饰的p是个常量,但p可以被更改...原创 2019-05-14 21:53:48 · 202 阅读 · 0 评论 -
C++学习第三节:C和CPP的区别第一节课
Note1:带有默认值的函数在函数定义的时候 从右向左给形参 默认值;不要从左到右给任何一个函数都需要一个调用约定 _cdecl _stdcall _fastcallint sum(int a, int b=20)//当形参有默认值时:调用的时候可以只传入没有默认值的实参{ return a + b;}int main(){ int a=10;//两个局部变量 int b=2...原创 2019-05-14 18:45:34 · 954 阅读 · 0 评论 -
C++学习第二节:函数调用堆栈
程序员的自我修养的第10章:详细地看函数的调用堆栈函数的返回值函数的调用约定注:C++也有面向对象 面向过程两种编程方式int sum(int a, int b){ int temp = 0;//定义局部变量 temp = a + b; return temp;}int main(){ int a = 10, b = 20;//局部变量是指令:访问局部变量都是通过ebp指...原创 2019-05-14 13:12:55 · 750 阅读 · 0 评论 -
关于 二分 的总结:
在一个给定范围的序列里,猜数字这个游戏可是非常的经典。显然 每次选择当前范围的中间数去猜,就能尽可能快的逼近这个正确的数字!!!在这个简单有趣的游戏背后,是一个算法中经典的问题:如何在一个依然有序的序列中找到这个给定的数?解法一:直接扫描法 从到开始扫描,但是显然它的时间复杂度 O(n)。虽然说,查询次数不多时,还是可以的,但是100000个数需要查询,那么就不太好了!!!!解法二:二分查...原创 2019-05-14 00:48:40 · 215 阅读 · 0 评论 -
C++ 继承与多态详解2
Question00:静态绑定/静多态:编译时期动态绑定/动多态:调用函数最终被 编译成 call eax。寄存器的值在运行时才知道,eax从虚函数表vftable里拿的虚函数地址。Question01:1 很多类定义的对象,用一个变量去统一的接收:基类的指针或者引用。2 想知道基类指针p 指向的哪个Derive对象?要借助一个识别RTTI的类型强转,dynamic_cast 当基...原创 2019-05-08 18:23:02 · 179 阅读 · 0 评论 -
C++ 继承与多态详解
PS1:C++的I/O即输入 输出不是很重要,只需要掌握operator>> 和 operator<<即可,这两个函数用在cout cin一个自定义对象的时候,我们必须给这个对象提供operator>> 和 operator<<。PS2:C++的异常也不是很重要继承与多态:1 继承的本质:代码复用class Base// Base是基类{...原创 2019-04-25 16:09:28 · 410 阅读 · 0 评论 -
关于强制类型转换的一点想法
1 代码段1#include<iostream>#include<functional>using namespace std;int main(){ int a = 5; int*p = &a; int*q = (int *)a;//将a的值5 强制类型转换为整型指针类型地址 q的值为00000005 cout << typei...原创 2019-04-25 13:51:07 · 130 阅读 · 0 评论 -
指针和引用区别 数组名和指针的区别
Note1:指针有两个值:P 和*Pvoid fun(int *p)//形参 不分配空间{ *p += 100; int a = 10; p = &a;}int main(){ int x = 10; int *s = &x; fun(s); cout << *s <<endl<< x; return 0;}分析...原创 2019-05-04 21:04:31 · 479 阅读 · 0 评论 -
2019年4月18日 关于使用断言assert的简易说明(二)
实际上,在编程中我们经常会出于某种目的(如把 assert 宏定义成当发生错误时不是中止调用程序的执行,而是在发生错误的位置转入调试程序,又或者是允许用户选择让程序继续运行等)需要对 assert 宏进行重新定义。但值得注意的是,不管断言宏最终是用什么样的方式进行定义,其所定义宏的主要目的都是要使用它来对传递给相应函数的参数进行确认检查。如果违背了这条宏定义原则,那么所定义的宏将会偏离方向,失去...转载 2019-04-18 13:51:36 · 980 阅读 · 0 评论