C++课程上 有关“指针” 的小结
上完了C++的第二节课以后,觉得应该对这个内容进行一个小结,巩固知识点,并对我的心情进行了一个侧面烘托...
开始上课的老师:
正在上课的我:
上去敲代码的我:
过程是这样的:
下来的我:
非常的尴尬,简直是黑历史= =
变量:
变量有整形变量,浮点型变量,字符型变量,当然还有指针变量。对于32位操作系统而言,为字符型变量分配的内存单元是一个字节,整型是两个字节,单精度浮点型变量为四个,双精度浮点型变量为八个字节,今天要阐述的指针变量是四个字节。
指针变量所存储的是地址。
int a;
int *pa;
pa = &a; //将整形变量a的地址赋值给整型指针pa
经过上面代码的处理以后,指针pa指向变量a。
指针变量的定义:
int *ptr1;
float *ptr2;
char *ptr3;
void *ptr;
指针变量的赋值:
int *ptr,a = 4;
ptr = &a; //将变量a的地址赋值给指针变量ptr
经过上面语句的处理以后,整形指针指向整形变量a。原来以为整形指针和整形变量放在一起定义编译会出错,学习了:int *ptr,a=4;
指针变量的引用:
(1)
int main()
{
int *p,m;
scanf("%d",&m);
p = &m; //指针p指向m
printf("%d\n",*p);
return 0;
}
这段程序比较简单,没有什么问题。
(2)
int main()
{
int *p,m;
p = &m;
scanf("%d",p);
printf("%d\n",m);
return 0;
}
我:“???”
回来以后自己试了下,弄懂了这个内容,就是把之前输入的scanf中的&m
替换为p。这里摘取一段C++中文网介绍scanf的说明。
例如:&a、&b分别表示变量a和变量b的地址。
这个地址就是编译系统在内存中给a、b变量分配的地址。在C语言中,使用了地址这个概念,这是与其它语言不同的。 应该把变量的值和变量的地址这两个不同的概念区别开来。变量的地址是C编译系统分配的,用户不必关心具体的地址是多少。
(3)
int main()
{
int *p,m;
scanf("%d",p);
p = &m;
printf("%d\n",m);
return 0;
}
“这不行吧???”
确实是不行的,程序崩溃。原因是因为其不安全性。
指针:
指针是一种特殊的变量,它存储的数值是内存中的一个地址。
1.指针的类型
2.指针所指向的类型
3.指针的值 或者 指针所指向的内存区
4.指针本身所占据的内存区
指针的类型和指针所指向的类型:
1.指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。
2.只需把指针声明语句里的指针名字和名字左边的指针声明符*去掉,剩下的部分就是这个指针所指向的类型。
int *ptr; //整形 指针
char *ptr; //字符型 指针
int* *ptr; //整形指针 的 指针
int (*ptr)[3]; //指向含三个整形元素的整形数组 的 指针
int* (*ptr)[4]; //指向含四个整形指针的指针数组(array of pointers) 的 指针
这里注意“数组 指针”(a pointer to an array)和“指针 数组”(array of pointers)的区别,参考资料:指针数组和数组指针的区别
void 指针
int main()
{
int m = 5;
void *ptr;
ptr = &m;
printf("%d\n",*ptr);
return 0;
}
编译错误。
“void型指针,表示这个指针指向的内存中的数据的类型要由用户来指定。
比如内存分配函数malloc函数返回的指针就是void *型,用户在使用这个指针的时候,要进行强制类型转换,也就是显式说明该指针指向的内存中是存放的什么类型的数据
(int *)malloc(1024)表示强制规定malloc返回的void*指针指向的内存中存放的是一个个的int型数据。”
指针的值:指针所指向的内存区。
指针本身所占据的内存区:
可以使用sizeof(指针类型),对于32位操作系统来说,系统为指针变量分配4个字节的长度。
char *np;
1. sizeof(char) // 1
2. sizeof(*np) //4
3. sizeof(char *) //4
4. sizeof(char *p) //compiling error
C++课程上 有关“指针” 的小结的更多相关文章
- C++智能指针初学小结
本篇随笔仅作为个人学习<C++ Primer>智能指针一节后的部分小结,抄书严重,伴随个人理解.主要介绍shared_ptr.make_shared.weak_ptr的用法和联系. C++ ...
- ac自动机fail树上按询问建立上跳指针——cf963D
解法看着吓人,其实就是为了优化ac自动机上暴力跳fail指针.. 另外这题对于复杂度的分析很有学习价值 /* 给定一个母串s,再给定n个询问(k,m) 对于每个询问,求出长度最小的t,使t是s的子串, ...
- JAVA线上常见问题排查手段(小结)
在平时开发过程中,对于线上问题的排查以及系统的优化,免不了和Linux进行打交道.每逢大促和双十一,对系统的各种压测性能测试,优化都是非常大的一次考验.抽空整理了一下自己在线上问题排查以及系统优化的一 ...
- php实现文件上传下载功能小结
文件的上传与下载是项目中必不可少的模块,也是php最基础的模块之一,大多数php框架中都封装了关于上传和下载的功能,不过对于原生的上传下载还是需要了解一下的.基本思路是通过form表单post方式实现 ...
- 七牛---以一个七牛上传的实例小结下AJAX跨域【转】
http://blog.csdn.net/netdxy/article/details/50699842 使用七牛过程中,很多用户或多或少遇到跨域的问题,这篇文章主要介绍下跨域的概念来看什么情况下会出 ...
- C指针类型小结
要理解复杂的指针类型其实很简单,一个类型里会出现很多运算符,它们也像普通表达式一样,有优先级. 原则: 从变量名开始,根据运算符优先级结合,一步一步分析. 下面让我们先从简单的类型开始慢慢分析吧: i ...
- c指针学习小结(参考别人总结的经验)
指针学习与总结一.1.int *p :p与*先结合,说明p是一个指针,然后与int结合说明指向的是一个int型的.2.int p[3] :p与[]结合说明p是一个数组,然后与int结合,说明数组里的元 ...
- Xenko基础API笔记3- Pointers指针设备屏幕上点对应的手指触摸。
样本这里是一个简单的示例程序,跟踪目前在屏幕上的指针和打印他们的位置.访问输入字段,类继承自@ SiliconStudio.Xenko.脚本的类. public override async Task ...
- 智能指针剖析(上)std::auto_ptr与boost::scoped_ptr
1. 引入 C++语言中的动态内存分配没有自动回收机制,动态开辟的空间需要用户自己来维护,在出函数作用域或者程序正常退出前必须释放掉. 即程序员每次 new 出来的内存都要手动 delete,否则会造 ...
随机推荐
- Javascript核心对象
JavaScript的实现包括以下3个部分: 1)核心(ECMAScript):描述了JS的语法和基本对象. 2)文档对象模型 (DOM):处理网页内容的方法和接口 3)浏览器对象模型(BOM):与浏 ...
- 给JSON中put的value=null时,这对key=value会被隐藏掉。
当我们在JSON里像这样json.put("key",null);put值进去的话,这个键值对就会被隐藏掉例如下面的例子: <pre name="code" ...
- [svc]sublime text3设置py环境最佳姿势
搞个py虚拟环境 待sublim调用 - for windows pip install virtualenv pip install virtualenvwrapper pip install vi ...
- 测试人员需要了解的sql知识(提高篇)
上一篇写了一些基础的sql知识,这里再深挖一些常用的 ------------------------------------------------------------------骄傲的分割线- ...
- 第22章 CLR寄宿和AppDomain
22.1 CLR寄宿 CLR Hosting(CLR 宿主)的概念:初始启动.Net Application时,Windows进程的执行和初始化跟传统的Win32程序是一样的,执行的还是非托管代码,只 ...
- c#实现图片二值化例子(黑白效果)
C#将图片2值化示例代码,原图及二值化后的图片如下: 原图: 二值化后的图像: 实现代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 ...
- iOS开发--UILabel根据内容自动调整高度
写法一:对象方法,传入:字体/最大尺寸. 即可得到宽高, 最大尺寸主要限制宽度,如果是一行就给个{MAXFLOAT,MAXFLOAT};如果是多行就限制X值,Y值随便给 - (CGSize)sizeW ...
- python-计算器实现
# 开发一个简单的python计算器# 实现加减乘除及括号优先级解析# 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * ...
- JQuery表单元素过滤选择器
此选择器主要是对所选择的表单元素进行过滤: 选择器 描述 返回 enabled 选择所有的可用的元素 集合元素 disabled 选择所有的不可用的元素 集合元素 checked 选择所有被选中的元素 ...
- VueJS 数据驱动和依赖追踪分析
之前关于 Vue 数据绑定原理的一点分析,最近需要回顾,就顺便发到随笔上了 在之前实现一个自己的Mvvm中,用 setter 来观测model,将界面上所有的 viewModel 绑定到 model ...