- 浏览: 324379 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
huangyunbin:
swc.advance(); 这个什么时候被调用是最核心的 ...
滑动窗口计数java实现 -
80后的童年2:
深入浅出MongoDB应用实战开发网盘地址:https://p ...
MongoDB 从入门到精通专题教程 -
rryymmoK:
深入浅出MongoDB应用实战开发下载地址:http://pa ...
MongoDB 从入门到精通专题教程 -
u012352249:
怎么支持多个窗口啊?
滑动窗口计数java实现 -
rryymmoK:
深入浅出MongoDB应用实战开发百度网盘下载:链接:http ...
MongoDB 从入门到精通专题教程
//常指针,或叫定指针:指针指向一个规定的地址,不能指向别处 //常指针表示这个指针是常量.就像指南针,不能修改. int * const p;//常指针,禁止修改*P int n; p = &n; //这样写可以,但是不能通过*p来修改n const int * q; //指向常量的指针 const int * const r; //指向常量的常指针.
指针都占4字节内存空间,因为它只要保存地址
//指向不确定类型指针
void * p;//可用来保存各种类型的地址
#include <iostream.h> using namespace std; int main() { void * p = NULL; int n = 100; double d = 20.34; p = &n; cout << *(int *)p << endl; //这里需要强转,不然是会报错的 p = &d; cout << *(double *)p << endl; } char buf [ ] = "good bye"; char * p = "good bye"; sizeof(buf);//9 sizeof(p);//4 因为P是一个指针,就是一个地址,因此是4 int main(int argc, char * argv[ ] )//系统会把命令行中字符串的字符个数传过来 //argc 命令行字符串的个数 //argv[] 依次指向命令行中的字符串 #include <iostream.h> using namespace std; int main ( int argc, char* argv[] ) { cout << "You input the command : " << argv[0] << endl; cout << "Args has : " << argc << endl; cout << "They are : "; for( int i=1; i<argc; i++ ) cout << argv[i] << ' '; cout << endl; } #include <iostream> #include <cstdlib> using namespace std; int main(int argc, char* argv[]) { if(argc-1==0) { cout << "Thank you!" << endl; return 0; } double n=0.0; for( int i=0; i< argc; i++ ) n += atof ( argv[i] ); //注意atof(),atoi()函数的用法,可用man查询 cout << "The average is : " << n/(argc-1) << endl; }
---------------------------------------
* 引用
一个变量的类型和地址是终身不变的.
同理变量别名也是终身不变的.
引用就是变量的别名.
#include <iostream> using namespace std; int main() { int n = 100; int m = n; int * p = &n; int & rn = n; cout << "&n = " << &n << endl; cout << "&m = " << &m << endl; cout << "&p = " << &p << endl; cout << "&rn = " << &rn << endl;//&rn == &*p; }
引用是聪明的指针.
起名规则:引用r开头,指针变量p开头.
c++中提倡用引用而不是指针,只要能用引用解决不用指针.
引用直接操作初始它的那个变量,类型还是要一致.
引用更方便也更安全.
常量引用:1,接受常量初绐化.2,禁止修改这个引用.(const int& r)
**尽量用引用来传递参数,尽量用const来禁止对引用的修改.
与一般的参数传递相比:常量引用不会复制一份数据,提高效率了.有的变量禁止复制,
可解决此类问题.
函数的返回类型同样可写成引用,不会复制数据.
=====================================================
* 函数指针
* 使用指针和引用要注意的事项
指针是用来保存地址的,引用是变量的别名,它们都是用来访问原始变量的.
要保证那个变量有"以后",也就是说,原始变量的生命周期要够长,不然指针也
变成野指针了,说白了就是函数返回的时候,此原始变量还存在.指针在使用的时候
一定要初始化(NULL).同理,函数的形参是在调用函数的时候由实参来初始化的.
不初始化是垃圾数据,除全局变量,静态变量外.默认初始化为0.还是建议自已进行
合理的初始化,一般初始化成0.
指针与引用,首选引用,因为它更安全,方便.
用指针保证指向有效,NULL指针没有指向任何地方.
当delete后,指针依然指向已释放的空间,所以将其置NULL,这一点很重要.
函数名就表示函数的地址,不用再对其进行取地址了.
函数指针定义:像声明函数一样,定义函数指针,不同在于,要把函数名改成(*指针名)的形式.
函数指针在指向的时候也需要类型一致.
//示例程序 #include <iostream> using namespace std; void reset( int a[ ] , int n ); void input( int a[ ] , int n ); void output( int a[ ] , int n ); void sort( int a[ ] , int n ); int main() { void (*fp) ( int a[], int n )=NULL;//函数指针的定义与声明一样 int x[5]; fp = output;//给函数指针赋值,因为函数名就是函数地址 output( x, 5 ); fp( x, 5 ); } void output( int a[ ] , int n ){ /* output code ... */ }
//函数指针示例程序. #include <iostream> #include <cstring> using namespace std; void reset( int a[ ] , int n ); void input( int a[ ] , int n ); void output( int a[ ] , int n ); void sort( int a[ ] , int n ); int main() { void (*fp) ( int a[], int n )=NULL;//函数指针的定义与声明一样 int x[5]; fp = output;//给函数指针赋值,因为函数名就是函数地址 fp( x , 5 ); output( x, 5 ); fp = reset; fp(x , 5 ); fp = output; fp( x, 5 ); } void output( int a[ ] , int n ){ for( int i=0; i<n; i++ ) cout << a[i] << ' '; cout << endl; } void reset( int a[ ] , int n ){ memset( a, 0, sizeof(int)*n);//用特定的值初始化一块内存,可用man查看memset() //for(int i = 0; i< n ; i++ ) // a[i] = 0; }
发表评论
-
UC++之目录和文件操作
2009-06-05 11:55 1324* UC + 文件系统 - 目 ... -
用c++实现二叉树增删改查和快速排序算法
2009-06-02 13:18 2680//快速排序 #include <iostream ... -
快速排序完整示例
2009-06-01 21:04 1118#include <iostream> usin ... -
C++容器与迭代器
2009-06-01 17:55 2023* 容器的迭代器还有几种: + iterator:正常迭 ... -
c++排序算法与模板和STL
2009-05-31 13:32 1856* 冒泡排序 一轮比较所有相邻数据对,如果顺序不合适就交换, ... -
C++算法与二叉树的实现
2009-05-30 18:35 2552* 输出格式控制 + 成员函数:width fill pr ... -
c++链表 异常 内部类 输出格式控制
2009-05-29 21:36 1736C(控制台) F(文件) ------------- ... -
C++之I/O
2009-05-27 21:26 1898* 重载 + 拷贝构造函数A(const A& o ... -
C++拷贝构造函数与运算符重载
2009-05-26 20:32 2473拷贝构造函数与运算符的重载 * 多态 - 前堤:继承,虚函 ... -
C++多态与类型转换
2009-05-25 17:10 1905c++中字符串的处理,用string进行处理,实际上它是一个类 ... -
类的继承
2009-05-24 09:42 10211,如何定义,实现一个类 ... -
面向对象编程
2009-05-23 19:20 746//倒计时 #include <iostr ... -
C++ 面向对象
2009-05-23 15:40 966* 指针简单总结 //接受命令行参数的函数 int main ... -
C与C++中的time相关函数
2009-05-23 14:03 1333本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所 ... -
C++指针
2009-05-22 19:22 1206C++ 里有字符串类型string ,最大可支持1G,可用st ... -
数组本质
2009-05-21 18:52 1244数组是一片连续的内存空间,定义时一般指明大小和类型,这样编译器 ... -
C++用递归解决汉诺塔问题(续)
2009-05-19 12:16 971#include <iostream.h> ... -
c++ 递归实例二
2009-05-18 22:37 1702#include <iostream.h> ... -
C++用递归解决汉诺塔问题
2009-05-18 21:54 2576递归确实是一个不错的算法,可以将原来很复杂的问题简化.这里要注 ... -
C++ 入门
2009-05-15 21:31 0一次性修改LINUX环境变量:(bash)export $PA ...
相关推荐
原理: ...2. 获得文件大小ftell, 格式化HTTP请求头 "Range: bytes=ftell -", 以偏移httpfile指针,实现断点续传 3. 获得要下载的文件,以二进制形式传输,OpenURL 4. 接收数据,防止阻塞PeekMessage
本项目利用C++ Builder开发环境,实现了FTP协议下的多线程断点续传功能,这在大文件传输时尤其有用,可以提高传输效率并能应对网络中断的情况。 在C++ Builder中,我们可以使用 Indy 或 WinInet 库来实现FTP协议的...
在C++中,指针和数组是两个非常重要的概念。指针是指向内存中某个位置的变量,而数组是存储在连续内存中的多个元素的集合。指针和数组的使用需要非常小心,避免野指针和数组越界等问题。 6. 面向对象编程 C++是一...
- **《More Effective C++》**:作为《Effective C++》的续作,本书进一步深化了C++编程中的优化技巧,特别适合已经有一定C++基础的学习者阅读。 - **《Exceptional C++》**:本书关注C++异常处理机制,深入探讨了...
随机读写意味着可以从文件任何位置进行读写,而顺序读写意味着从文件头开始或从尾部续上。 C++把每一个文件都看成一个流,并以文件结束符结束。对文件读写实际上受到文件定位指针的控制,输入流的指针也称为读指针...
《More essential c++》是C++学习领域中一本经典教材的续作,该书着重于介绍了C++编程语言中更为高级和深入的特性及用法。由于给出的文件中仅提供了部分章节的内容预览,完整书籍的内容无法在这里详尽展开,不过可以...
作为《Effective C++》的续作,《More Effective C++》继续深化对C++编程实践的理解,提供了更多的优化技巧和设计模式,对于提高代码质量和性能有极大帮助。 ### Exceptional C++ 这本书专注于C++中的异常处理机制...
C++对C语言的扩充包括了变量的引用、引用的引用、指针的引用、const修饰符的使用等。其中,引用为变量提供了一个别名,而const修饰符用于声明常量,防止数据被修改。内联函数是一种特殊的函数,它建议编译器在每次...
同时,为了保证代码的可读性和可维护性,良好的编程实践,如异常处理和资源管理(例如使用智能指针),也应当被遵循。 对于FTP操作,安全性也是一个重要的考虑因素。FTP的原始版本不支持加密,可能导致数据在传输...
《Effective C++》及其续作《More Effective C++》是两本非常有价值的书籍,它们涵盖了如何高效地使用C++以及一些最佳实践。此外,《The C++ Programming Language》由C++的设计者Bjarne Stroustrup编写,是一本权威...
需要注意的是,宏定义中的多行语句需要在最后一行末尾添加反斜线 `\` 来续行。 7. **标准库函数**: - `<algorithm>` 库包含了排序函数 `sort()`,在示例中用于对数组 `a` 进行升序排列。`sort(a, a+20, compare)...
- **非基本类型**:包括`enum`(枚举)、数组、结构体、联合体、类、指针等。 - **无符号类型**:在基本类型前加`unsigned`前缀,可以创建无符号整数类型。 ### 转义字符 在C++中,转义字符允许在字符串中插入特殊...
书中可能会介绍智能指针、RAII(Resource Acquisition Is Initialization)原则,以防止内存泄漏和悬挂指针。 7. **模板和泛型编程**:高质量的C++编程也包括对模板的正确使用,避免模板的滥用导致编译时膨胀和代码...
在本文中,我们将探讨如何使用C++实现文件传输中的断点续传功能。断点续传是一种高效的技术,允许在文件传输中断后从上次停止的位置继续传输,从而节省时间和资源。以下是实现该功能的关键点和步骤。 首先,断点续...
- **指针与引用**:在内存管理、对象间通信等方面起到关键作用。 2. **游戏逻辑**: - **游戏循环**:游戏的核心部分,通常包含初始化、更新、渲染和事件处理等步骤。 - **时间管理**:控制游戏速度和节奏,如...
书中可能介绍了如何设计一个支持断点续传的下载程序,使用`boost.asio`库或者C++17的`std::net`库进行网络通信,以及如何保存和恢复下载状态以实现续传功能。 5. **C++学习资料**:作为一本学习资料,本书可能涵盖...
- **长行拆分**:当一行代码过长时,建议采用合适的拆分方式,比如使用续行符号等。 - **修饰符的位置**:对于类成员的访问修饰符(public、private等),定义其在代码中的放置位置,以便快速识别成员的可见性。 - *...