C++数组与指针回顾总结
//数组名是常量指针,
//a指向数组首元素,指针步长为数组元素大小,&a同样也指向数组首地址,指针步长为数组大小,如下: //a+1 是相对数组起始地址偏移了sizeof(int)字节
//&a+1 是相对于数组起始地址偏移了sizeof(a)字节
int a[] = { , , , };
cout << *a << *(a + ) << *(a + ) << *(a + ) << endl; // cout << a << " " << &a << endl; //两地址相同
cout << &a + << "," << &a + << endl; //0048FBB8,0048FBC8,刚好差了16字节 auto ta = a; //这个方式有趣,只能用这种方式原样使用数组
cout << ta[] << ta[] << ta[] << ta[] << endl; //1324 //向上取址,正确方式
int b = ;
int* p = &b;
int** pp = &p; //
int*** ppp = &pp;
int**** pppp = &ppp; //向上取址,错误方式
int** ppt = &(&b); //&b是常量地址,&(&b)是对常量取址,错误行为,只有变量能取址 //定义一个指向 int[4]类型的指针pa,注意,数组元素个数必须相等,不能是 int(*pa)[2] = &a;
int(*pa)[] = &a; //同理,可以先定义一个int (*)[4]类型,再用它定义变量
typedef int(*Arr4Ptr)[]; //声明类型
Arr4Ptr px = &a; //定义变量 //数组内存是连续的吗?
//答案:数组的一级元素在内存中都是连续存放的,示例如下: int iarr1[]; //内存连续
int iarr2[]; //内存连续
int iarr3[]; //内存连续
float farr[]; //内存连续 int* arrptrs[]; arrptrs[] = iarr1;;
arrptrs[] = iarr2;
arrptrs[] = iarr3; //一级元素共3个,每个都是类型为 int*的指针,它们在内存中是连续存放的:
//002CF994,002CF998,002CF99C
cout << &(arrptrs[]) << "," << &(arrptrs[]) << "," << &(arrptrs[]) << endl; //二级元素iarr1,iarr2, iarr3明显是不连续存放的,因为它们是三个不相关的普通变量
cout << iarr1 << "," << iarr2 << "," << iarr3 << endl;
参考:https://www.cnblogs.com/nosadness/p/4369937.html
C++数组与指针回顾总结的更多相关文章
- Primer回顾 数组和指针
数组和指针类似于vector和迭代器. 区别在于:数组的长度是固定的.数组一经创建,就不允许添加新的元素.指针则可以像迭代器一样用于遍历和检查数组中的元素. 设计良好的程序只有在强调速度时才在类实现的 ...
- 数组与指针的区别,以及在STL中传递数组/指针
数组和指针在作为实参传入T[] 或T*的形参时没有区别 void f(int pi[]) { cout << sizeof(pi) << endl; } int a[5] = ...
- C语言数组与指针总结
寒假要开始猛刷<剑指offer>,先回顾一下C语言基础做个热身. 指针 相信大家对下面的代码不陌生: ; int *p; p=&i; 这是最简单的指针应用,也是最基本的用法.再来熟 ...
- 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...
- C语言核心之数组和指针详解
指针 相信大家对下面的代码不陌生: int i=2; int *p; p=&i;这是最简单的指针应用,也是最基本的用法.再来熟悉一下什么是指针:首先指针是一个变量,它保存的并不是平常的数据,而 ...
- 《征服 C 指针》摘录3:数组 与 指针
一.数组 和 指针 的微妙关系 数组 是指将固定个数.相同类型的变量排列起来的对象. 正如之前说明的那样,给指针加 N,指针前进“当前指针指向的变量类型的长度 X N”. 因此,给指向数组的某个元素的 ...
- C指针-数组和指针的归一
int bArr[] = {1,2,3}; int *iarr = bArr; *iarr = 6; printf("%d\n",*iarr); printf("%d\n ...
- 《C专家编程》第四章——令人震惊的事实:数组和指针并不相同
数组和指针是C语言里相当重要的两部分内容,也是新手程序员最容易搞混的两个地方,本章我们锁定指针与数组,探讨它们的异同点. 首先来看指针与数组在声明上的区别: int a[10]; int *p; 很明 ...
- (C语言)数组与指针的区别
以前常常听过这种说法,说数组和指针这两者比较像,但是不能混淆,可是一直没能理解.刚刚在李云的<专业嵌入式软件开发>中,看了讲述数组与指针区别的一章,似乎有所领悟.本着知乎上看到的这张图,我 ...
随机推荐
- vi编辑器:命令模式、输入模式、末行模式
1.命令模式(command mode)—执行命令 在该模式中,可以输入命令来执行许多种功能.控制屏幕光标的移动,字符.字或行的删除,移动复制某区段及进入Insert mode下,或者到 last l ...
- New Concept English three (41)
31w/m The typing speed need to improved 43errors The quiet life of the country ahs never appealed ...
- FFmpeg再学习 -- 视音频基础知识
最近一直在看雷霄骅 FFmpeg 系列视频,然后将自己的理解总结一下. 参看:<基于 FFmpeg + SDL 的视频播放器的制作>课程的视频 一.视频播放器原理 自己理解: 比如一个 M ...
- openlayers自定义图层控制的实现
好久没写博文了,今天出来冒个泡. 最近一直在考虑一件事情,那就是openlayers中自定义wms的图层控制.用过openlayers的人都知道,在openlayers中有自带的图层控制的控件,调用方 ...
- Servlet中的Filter(过滤器)
Filter,过滤器,是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改.判断等,把不符合规则的请求在中途拦截或修改.也可以对响应进行过滤,拦截或修改 ...
- Hive中使用Python实现Transform时遇到Broken pipe错误排查
Hive中有一表,列分隔符为冒号(:),有一列utime是Timestamp格式,需要转成Weekday存到新表. 利用Python写一个Pipeline的Transform,weekday.py的代 ...
- Visual Studio Code教程:基础使用和自定义设置
一.界面介绍 1.1 界面介绍 1.2 文件夹和文件的打开 文件——>打开文件夹/打开文件 1.3 新建文件/文件夹 新建文件: a. 文件——>新建文件: b. 按Ctrl+n; c. ...
- FastAdmin Bootstrap-Table 分页列表 pageList 如何设置?
FastAdmin Bootstrap-Table 分页列表 pageList 如何设置? FastAdmin 的 表格使用的是 Bootstrap-Table 组件,这个组件该有的功能他都有. 默认 ...
- 插耳机对orientation sensor的影响
偶然发现,耳机孔插上耳机对手机的磁感应器有非常大的影响. 具体影响的方式和解决的方法,慢慢研究下
- 自定义第三方YUM源
1.切换到cloudboot系统目录中 2.拷贝repodata目录的*-repo.xml文件到系统目录下 3.删除系统目录的repodata目录 4.编辑repo.xml内容,base添加rpm包包 ...