(*p)[5]与*P[5]有什么区别,看代码

main()
{ char a[5]={'A','E','C','D'};//数组指针char (*p3)[5] = a;//在栈中产生一个大小为   5个char的空间  p代表的的是整个空间的首地址printf("p3 is %x\n",p3);printf("*p3 is %x\n",*p3);//空间的首地址和数组的首地址相同printf("**p3 is %c\n",**p3);//数组的首地址的值//char (*p)[5]; 表示 p 是 一个 指针,用于 指向 有5个元素的 char 型 数组。//*p[5] -- 方括号优先,p[5] 是 数组, *p[5] 则是指针数组。表示 p 是 五个 指针。//char *p[5]; 表示 p 是 指针数组,可以存放 5 个指针。它们5个,各自 可以 指向 各自的 char 目标。return 0;
} 

执行结果

p3 is 65ffb6b
*p3 is 65ffb6b
**p3 is A

为什么这里 p3  *p3是打印出来是一样的?

来看一段代码

    int arr[5] = {0};printf("arr is %x, &arr is %x\n", arr, &arr);

执行结果:

arr is b9bff890, &arr is b9bff890

我现在直接用printf输出arr相当于输出了arr中储存的内容(不是输出以该内容为地址的变量),其结果居然与arr的地址是相同的,这怎么可能?

理解这个很重要,当你理解之后你就会发现设计C语言的大师们是多么的聪明,这些设计非常利于C语言书写的简洁
a与&a都是指针,指针有两个要素
第一个是地址值,也就指向的位置,你打印出来的就是地址值,a与&a的地址值是一样的
第二个是类型(所指向的数据类型),a指向数组第一个元素,&a指向数组a,a+1后的地址值会偏移一个元素的长度,&a+1后的地址值会便宜一整个数组的长度,所以a与&a类型是不一样的

关于指针与数组的关系,理解之后对代码质量会有很大的帮助,有一句话说的好:在C语言中只有一维数组(N维数组的元素是数组),数组名作为指针时永远指向第一个元素,如
数组a[3] ,*a = a[0],
数组a[3][4], *a = a[0],只不过这时候a[0]又是一个数组,这时候a[0]又是指向它自己元素的第一个元素,又有*a[0] = a[0][0].
这种方式可以推广到N维数组,所有数组直接对数组名取地址(如&a)得到的指针指向该数组,而不是指向第一个元素

c语言中(*p)[5]与*P[5]的区别相关推荐

  1. C语言中()和【】的区别?

    C语言中()和[]的区别? 1.注意()是初始化,[]是定义多个对象. 2.int* p = new int (100) 是创建一个int型的内存,并赋值为100; int *p = new int[ ...

  2. c语言中换行符与回车符的区别,C语言中换行符与回车符的区别

    本文章详细介绍了回车与换行符的由来和区别.讲解,通俗易懂,可以使自己深入理解它们 C语言中换行符与回车符的区别 能不能说"换行符就是输入完一行内容后,光标转到下一行的起始位置",而 ...

  3. c语言中不用换行读符而直接换行,C语言中换行符与回车符的区别

    1.C 语言中换行符与回车符的区别能不能说"换行符就是输入完一行内容后,光标转到下一行的起始位置",而"回车符就是输入完一行后光标转到该行的起始位置,其并不换行" ...

  4. c语言标量变量是什么,C语言中的结构和联合之间的区别

    C中的结构 结构是C语言中可用的用户定义数据类型, 它允许组合不同种类的数据项.结构用于表示记录. 定义结构: 要定义结构, 你必须使用struct声明. struct语句定义一种新的数据类型, 该数 ...

  5. c语言中按位或与按位异或的区别,C:按位与、按位或、按位异或运算

    一.按位与 & 1.概念:参加运算的两个对象,按二进制位进行"与"运算,负数按补码形式参加按位与运算. 2.规则 0&0=0; 0&1=0; 1&0 ...

  6. C语言中变量的作用域和生存期的区别

    变量的作用域与生存期 一.变量的作用域 1.基本概念 2.代码分析 3.总结 二.变量的生存期 1.基本概念 2.C语言的内存分布 (1)基本概念 (2)数据在内存中的分布 3.总结 4.补充 一.变 ...

  7. Hive 中类SQL语言中的 oder by,gruop by的区别

    order by 是按字段排序 group by 是按字段分组,即select 字段必须是"分组依据字段" order by 从英文翻译出发,就是行的排序方式,默认的为升序. or ...

  8. C语言中取余与取模的区别

    c中取余与取模区别 以前没注意过这个问题,今天查了一下,感觉过于繁琐,现在简单明了的总结一下 对于整型数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者 ...

  9. c语言中 #include < > 和include “ “的区别

    一.引用的头文件不同 #include< >引用的是编译器的类库路径里面的头文件. #include" "引用的是你程序目录的相对路径中的头文件. 二.用法不同 #in ...

  10. c语言中14 3,C语言中的单精度和双精度浮点型的区别!3.14是哪种?3.14159呢?

    3.14是单精度,3.14159是双精度. 两者区别如下: 一.指代不同 1.单精度:是指计算机表达实数近似值的一种方式. 2.双精度:此数据类型与单精度数据类型(float)相似,但精确度比floa ...

最新文章

  1. AI一分钟 | 传许家印已投资贾跃亭FF;腾讯将发布可接收微信的智能音箱;阿里确认研发自动驾驶技术...
  2. 干货 | 为你解读34篇ACL论文
  3. RTSP播放器网页web无插件直播流媒体音视频播放器EasyPlayer-RTSP实现支持H265编码格式过程介绍
  4. C/Cpp / const 用法
  5. 计算机怎么取消脱敏设置,一种敏感数据自适应的脱敏方法、系统技术方案
  6. LeetCode 第 197 场周赛(468/5273,前8.88%)
  7. python2.7 threading RLock/Condition文档翻译 (RLock/Condition详解)
  8. 电商促销海报PSD分层模板|创意合成,这样的设计越来越吃香!
  9. 龙星电脑横机制版软件_简用仓库管理软件v8.6.3-简用仓库管理软件电脑版下载...
  10. mysql 联表比对,MySQL联表查询详解/超详细mysql left join,right join,inner join用法分析比较...
  11. Mac系统如何删除.DS_Store文件且不再生
  12. JavaScript模态框实现
  13. html5 视频字幕制作工具,短视频如何添加字幕?10分钟学习5款视频字幕制作工具,干货!...
  14. linux 服务器 安装svn
  15. USB无线网卡和PCI-E无线网卡如何选择?
  16. Win7 开机后3分钟内硬盘等狂闪解决办法
  17. 如何用OCR文字识别软件将PDF转换成Excel
  18. 2021域名过期会引发哪些问题?说说常见弊端
  19. 2020.8.25 斗鱼Android开发二面面经
  20. 【JavaScript】浏览器

热门文章

  1. rrpp协议如何修改_Rrpp详解
  2. 15K的前端应届毕业生,就因为掌握了这些知识点!(前端企业级开发必备)
  3. 智慧校园管理系统,精细化+网格化
  4. 深入理解 window.onload
  5. 联想Y430P 下为 Ubuntu 安装无线网络
  6. C语言实现王者荣耀护甲减免机制
  7. 周鸿祎再谈“元宇宙”:文明内卷、数字化威胁,及元宇宙基础设施
  8. 计算机应用软件用着总是闪退是什么原因
  9. 第16届全国大学生智能汽车竞赛——百度智慧交通赛项技术方案公开
  10. 一、第十五届全国大学生智能汽车竞赛AI电磁——项目介绍