//数组名是常量指针,
//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++数组与指针回顾总结的更多相关文章

  1. Primer回顾 数组和指针

    数组和指针类似于vector和迭代器. 区别在于:数组的长度是固定的.数组一经创建,就不允许添加新的元素.指针则可以像迭代器一样用于遍历和检查数组中的元素. 设计良好的程序只有在强调速度时才在类实现的 ...

  2. 数组与指针的区别,以及在STL中传递数组/指针

    数组和指针在作为实参传入T[] 或T*的形参时没有区别 void f(int pi[]) { cout << sizeof(pi) << endl; } int a[5] = ...

  3. C语言数组与指针总结

    寒假要开始猛刷<剑指offer>,先回顾一下C语言基础做个热身. 指针 相信大家对下面的代码不陌生: ; int *p; p=&i; 这是最简单的指针应用,也是最基本的用法.再来熟 ...

  4. 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...

  5. C语言核心之数组和指针详解

    指针 相信大家对下面的代码不陌生: int i=2; int *p; p=&i;这是最简单的指针应用,也是最基本的用法.再来熟悉一下什么是指针:首先指针是一个变量,它保存的并不是平常的数据,而 ...

  6. 《征服 C 指针》摘录3:数组 与 指针

    一.数组 和 指针 的微妙关系 数组 是指将固定个数.相同类型的变量排列起来的对象. 正如之前说明的那样,给指针加 N,指针前进“当前指针指向的变量类型的长度 X N”. 因此,给指向数组的某个元素的 ...

  7. C指针-数组和指针的归一

    int bArr[] = {1,2,3}; int *iarr = bArr; *iarr = 6; printf("%d\n",*iarr); printf("%d\n ...

  8. 《C专家编程》第四章——令人震惊的事实:数组和指针并不相同

    数组和指针是C语言里相当重要的两部分内容,也是新手程序员最容易搞混的两个地方,本章我们锁定指针与数组,探讨它们的异同点. 首先来看指针与数组在声明上的区别: int a[10]; int *p; 很明 ...

  9. (C语言)数组与指针的区别

    以前常常听过这种说法,说数组和指针这两者比较像,但是不能混淆,可是一直没能理解.刚刚在李云的<专业嵌入式软件开发>中,看了讲述数组与指针区别的一章,似乎有所领悟.本着知乎上看到的这张图,我 ...

随机推荐

  1. 【python】import问题总结

    一.绝对引用 首先总结一下import的各种姿势: 1.import package 读这个包的__init__.py 2.import module 读这个模块全部内容 3.import packa ...

  2. vsftp中的local_umask和anon_umask

    umask是unix操作系统的概念,umask决定目录和文件被创建时得到的初始权限umask = 022 时,新建的目录 权限是755,文件的权限是 644umask = 077 时,新建的目录 权限 ...

  3. 使用Python 2.7实现的垃圾短信识别器

    最近参加比赛,写了一个垃圾短信识别器,在这里做一下记录. 官方提供的数据是csv文件,其中训练集有80万条数据,测试集有20万条数据,训练集的格式为:行号 标记(0为普通短信,1为垃圾短信) 短信内容 ...

  4. [Hive]HiveServer2概述

    1. HiveServer1 HiveServer是一种可选服务,允许远程客户端可以使用各种编程语言向Hive提交请求并检索结果.HiveServer是建立在Apache ThriftTM(http: ...

  5. Linux命令学习笔记目录

    Linux命令学习笔记目录 最近正在使用,linux,顺便将用到的命令整理了一下. 一. 文件目录操作命令: 0.linux命令学习笔记(0):man 命令 1.linux命令学习笔记(1):ls命令 ...

  6. Django 之Ajax

    必备知识:json 什么是json 定义 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 它基于 ECMAScript (w3c制定的 ...

  7. NSArray倒序输出的方法

    NSMutableArray *array = [NSMutableArray arrayWithObjects:",nil]; NSArray* reversedArray = [[arr ...

  8. 十七、python沉淀之路--三元表达式、列表解析

    一.三元表达式 a = '骑车' res = '好天气' if a == '骑车' else '睡觉' print(res) 睡觉 解析:res = '好天气'        if a == '骑车' ...

  9. RAC修改数据库的spfile位置

    RAC修改spfile位置 [root@rac1 ~]# su - oracle [oracle@rac1 ~]$ sqlplus  / as sysdba SQL*Plus: Release 11. ...

  10. Maven构建跳过测试步骤

    有时候我们不想再执行maven的package或者install命令时每次都执行test,那么可以在pom.xml里的build->pluginManagement->plugins新增如 ...