博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++指针总结
阅读量:4614 次
发布时间:2019-06-09

本文共 1059 字,大约阅读时间需要 3 分钟。

在C++中通过动态创建的对象,我们只能获得一个指针,并通过指针控制它。指针是存放对象的内存地址值,更准确的描述是对象的起始地址值。每一个指针都有一个相关的类型,不同数据类型的指针之间的区别不在指针的描述上,也不在指针所持有的地址上。而在于编译器如何解释特定内存地址上的内容。例如,在32位机器上,一个int型的指针地址在1000处,它跨越的寻址空间是1000~1003。一个double型的寻址空间是1000~1007。

这样我们就很容易理解在C++中,要给函数传递一个数组指针还必须告诉函数数组的长度。

一、是常量指针还是指针常量

在使用指针的时候,首先容易混淆的以下两个概念:

1)const T *pt;

2)T *const pt;

3) const T *const pt;

第一个变量的含义是:pt是一个指针,这个指针的类型是const T。换句话说,你不能修改指针地址指向的值,但是你可以修改地址。

第二个变量的含义是:pt是一个常量指针,这个指针的类型是T。你可以修改指针地址的值,但是不可以修改地址。

第三个变量的含义是:你既不能修改值也不能修改地址。

二、为什么有些函数的形参是指针的指针

我们经常会在一些第三方框架提供的函数接口中看到类似的形式(**T),这通常表示在函数内部会修改他们的地址。由于C++的函数参数传递是通过copy完成的,指针类型在函数内部无法通过改变地址的方式影响外部变量,例如:

int val = 5;void chg(int *pi) {  pi = &val;}void free(string *ps) {  ps = NULL;}int main() {  int idx = 1;  chg(idx);  cout << idx; // idx == 1  string *s = new string("hello");  free(s);  cout << *s; // hello}

仅仅通过传递指针类型无法达到效果。

三、指向函数的指针

时下流行的函数式编程需要我们将函数作为参数传递给另一个函数调用,函数指针是一个理想的实现方式。

int compare(const string &s1, const string &s2){} 函数指针的表达形式可以是这样:int (*pf)(const string &, const string &)。

 

转载于:https://www.cnblogs.com/learnhow/p/10422769.html

你可能感兴趣的文章
wpf button变成圆角
查看>>
测试开发学习进阶教程 视频&PDF
查看>>
序列号和反序列化==》nodejs之querystring模块(尼玛,太强大,好用耶)
查看>>
C#基础-连接Access与SQL Server
查看>>
autofac
查看>>
MacOS 系统终端上传文件到 linux 服务器
查看>>
Excel导出POI
查看>>
兼容性
查看>>
第三方框架----FMDB的使用
查看>>
C# 堆栈和堆 Heap & Stack
查看>>
自动执行sftp命令的脚本
查看>>
linux下非root用户安装python
查看>>
Web Service Error wsse:InvalidSecurity Policy Requires Integrity (Doc ID 1370736.1)
查看>>
MySQL
查看>>
Android 使用全局变量 (转)
查看>>
XCODE中为单独的文件设置不支持ARC的方法
查看>>
android01
查看>>
前后端渲染的区别
查看>>
mahout驱动类
查看>>
Ext.MessageBox<转>
查看>>