数组名a:
数组名可以作为数组第一个元素的指针。由数组和指针的关系知道,a代表这个地址数值,它相当于一个指针,指向第一个元素(&a[0]),即指向数组的首地址。数组中的其他元素可以通过a的位移得到,此时的进阶是以数组中单个的元素类型为单位的,即a+i = &a[i] 

数组名取地址&a:
对于一个普通的变量b,&b是指用取地址符号取得变量b的存放地址;a在内存中没有分配空间,只对数组a的各个元素分配了存储空间,此处数组名字a显然不是普通的变量,&a也不代表所取a的存储地址。

&a在数值上等于&a[0],也等于a。此时,&a数值上等于整个数组的起始位置地址,含义上代表整个数组所占内存的大小,因为它的进阶单位是整个数组的字节长度,&a + 1 等于的是数组结束之后的下一段的起始位置地址。

数组首地址&a[0]:
这个就是取地址的最直接的应用,a[0]在内存中实际分类存储空间,而&a[0]就是取该存储空间的地址,这与对于任意满足范围的i,&a[i]就是取第i个元素的存储地址一样。

数组指针*p:
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。经常用取地址符&将某个变量的地址赋给它如int *p=&a,同时常常对指针用取值符号*取得对应地址的内容(*p)。

#include<iostream>
using namespace std;
int main(){int a[5]={1,2,3,4,5};int *p=&a[0];//指针指向第一个元素cout<<"a:      "<<a<<endl; cout<<"&a:     "<<&a<<endl;cout<<"&a[0]:  "<<&a[0]<<endl;cout<<"a+1:    "<<a+1<<endl;cout<<"&a+1:   "<<&a+1<<endl;cout<<"&a[0]+1:"<<&a[0]+1<<endl;cout<<"p:      "<<p<<endl;cout<<"p+1:    "<<p+1<<endl; return 0;
}

cout<<p<<endl;被翻译为输出p指向的字符串值

cout输出的时候>>遇到'\0'的时候就会停止输出,那加一个'\0'就可以避免 输出未初始化区域的内容

#include<iostream>
using namespace std;
int main(){char a[5]={'g','o','o','d','\0'};char *p=&a[0];//指针指向第一个元素cout<<"a:      "<<a<<endl; cout<<"&a:     "<<&a<<endl;cout<<"&a[0]:  "<<&a[0]<<endl;cout<<"a+1:    "<<a+1<<endl;cout<<"&a+1:   "<<&a+1<<endl;cout<<"&a[0]+1:"<<&a[0]+1<<endl;cout<<"p:      "<<p<<endl;cout<<"p+1:    "<<p+1<<endl; return 0;
}

C++ 数组名a、数组名取地址a、数组首地址a[0]、数组指针*p相关推荐

  1. Win32的缓冲区溢出攻击(涉及用WinDbg分析 overflow函数的返回地址所在的地址与buffer首地址的距离 OFF_SET)

    Win32的缓冲区溢出攻击 一.学习过程 二.学习成果(求OFF_SET) 三.扩展阅读 一.学习过程 1.overflow函数的源代码 #include <stdio.h> #inclu ...

  2. 已知地址块中的一个地址是 167.199.170.82/27,求这个地址块的地址数、首地址以及末地址各是多少?

    答: 地址数: 2 5 =32 个 首地址: 167.199.170.64/27 末地址: 167.199.170.95/27

  3. 解析:数组名a、数组名取地址a、数组首地址a[0]、数组指针*p

    数组和指针向来就是傻傻分不清,当他们一起出现的时候就更加懵逼. 1 解析不同变量之间的区别: 数组名a: 数组名可以作为数组第一个元素的指针.我们由数组和指针的关系知道,a代表这个地址数值,它相当于一 ...

  4. char a[]和char *a的比较,数组名,数组首地址,a,a,a[0]

    char a[]和char *a的比较 指针和数组存在着一些本质的区别.当然,在某种情况下,比如数组作为函数的参数进行传递时,由于该数组自动退化为同类型的指针,所以在函数内部,作为函数参数传递进来的指 ...

  5. 剖析数组名、函数名(不是指针常量,更不是指针)

    对于一个数组,如 int a[4];  如果只是给出数组名a,编译器不知道该取该数组的第几个元素,因此编译器不会自动取值,而是返回该数组的首地址(第一个元素的地址).其实,数组名a就是数组本身,并不是 ...

  6. C++—— 数组名与向量名

    首先说一下自己的理解,然后参考理解 1.数组名代表数组的第一个元素的首地址 2.向量名代表这个容器的名字,&向量名表示这个容器的首地址 3.当拷贝给相同类型的其他变量时,采用值拷贝,即* 地址 ...

  7. 题8.18:编一程序,输入月份号,输出该月的英文月名。例如,输人3,则输出“March“ ,要 求用指针数组处理。

    题目 本题是谭浩强<C程序设计课后习题>题8.18. 题目: 编一程序,输入月份号,输出该月的英文月名.例如,输人3,则输出"March" ,要 求用指针数组处理. 以 ...

  8. [转载]js:数组里面获取键名和键值

    原文地址:js:数组里面获取键名和键值 作者:function http://www.cnblogs.com/xxmb/archive/2013/11/19/3431118.html 在写php时用a ...

  9. php指定键名排序,php二维数组指定其键名对其排序的方法

    安利个小李子先 $arr=[ '2'=>'red', '5'=>'green', 'name'=>'tom' ]; $other=[ '5'=>'new red', 'name ...

最新文章

  1. Spring 注解 @bean 和 @component 的区别, 你知道吗?
  2. P2P网络中DHT算法分析
  3. 如何停止一个正在运行的线程?
  4. iOS官方Sample大全
  5. Dos 改动IP 地址
  6. Win10下访问linux的ext4分区文件并拷贝
  7. python基于rsa的数字签名实现_青岛宽客聚会期权定价公式基于python的实现
  8. C/C++编译和链接过程详解 概述 (重定向表,导出符号表,未解决符号表)
  9. __dopostback
  10. c++中判断某个值在字典的value中_Python元组、字典、集合的简单介绍
  11. 如果redis没有设置expire,他是否默认永不过期?
  12. hbase读写数据流程
  13. cocos2d-x学习资源整理(持续更新)
  14. cad插件_CAD插件坐标标注安装教程
  15. 我的世界进服务器显示检查版本时间,我的世界怎么查看服务器种子_minecraft种子查看器...
  16. 【Android】spinner下拉框样式修改
  17. FPI厂商SoleraNetworks被Blue Coat收购
  18. sketch html插件,玩转Sketch,不容错过的5大实用插件推荐
  19. windows上使用mkcert颁发证书
  20. 禁止 input 自动填充

热门文章

  1. 关于广告投放需要懂的几个关键词(DAU,DNU等等)
  2. 鲍威尔讲话打击美元指数 国际金价大幅上涨
  3. c语言中abs与labs的区别,C / C ++中的abs(),labs(),llabs()函数
  4. Java初学者轻便易于上手的小项目(2020最新)
  5. C# 读写Excel
  6. 手撸Spring系列8:Spring AOP(理论篇)
  7. 信号检测与估计理论_论文解读 | 利用脑功能连接实现疲劳驾驶检测
  8. 【编译原理】确定有限自动机与非确定有限自动机
  9. 904. 水果成篮(c++)
  10. VLAN原理和配置,交换机创建vlan的多种方法、三种接口模式的作用和配置方法、Access、Trunk、Hybrid接口的特性以及配置方法和命令