c语言中(*p)[5]与*P[5]的区别
(*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]的区别相关推荐
- C语言中()和【】的区别?
C语言中()和[]的区别? 1.注意()是初始化,[]是定义多个对象. 2.int* p = new int (100) 是创建一个int型的内存,并赋值为100; int *p = new int[ ...
- c语言中换行符与回车符的区别,C语言中换行符与回车符的区别
本文章详细介绍了回车与换行符的由来和区别.讲解,通俗易懂,可以使自己深入理解它们 C语言中换行符与回车符的区别 能不能说"换行符就是输入完一行内容后,光标转到下一行的起始位置",而 ...
- c语言中不用换行读符而直接换行,C语言中换行符与回车符的区别
1.C 语言中换行符与回车符的区别能不能说"换行符就是输入完一行内容后,光标转到下一行的起始位置",而"回车符就是输入完一行后光标转到该行的起始位置,其并不换行" ...
- c语言标量变量是什么,C语言中的结构和联合之间的区别
C中的结构 结构是C语言中可用的用户定义数据类型, 它允许组合不同种类的数据项.结构用于表示记录. 定义结构: 要定义结构, 你必须使用struct声明. struct语句定义一种新的数据类型, 该数 ...
- c语言中按位或与按位异或的区别,C:按位与、按位或、按位异或运算
一.按位与 & 1.概念:参加运算的两个对象,按二进制位进行"与"运算,负数按补码形式参加按位与运算. 2.规则 0&0=0; 0&1=0; 1&0 ...
- C语言中变量的作用域和生存期的区别
变量的作用域与生存期 一.变量的作用域 1.基本概念 2.代码分析 3.总结 二.变量的生存期 1.基本概念 2.C语言的内存分布 (1)基本概念 (2)数据在内存中的分布 3.总结 4.补充 一.变 ...
- Hive 中类SQL语言中的 oder by,gruop by的区别
order by 是按字段排序 group by 是按字段分组,即select 字段必须是"分组依据字段" order by 从英文翻译出发,就是行的排序方式,默认的为升序. or ...
- C语言中取余与取模的区别
c中取余与取模区别 以前没注意过这个问题,今天查了一下,感觉过于繁琐,现在简单明了的总结一下 对于整型数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者 ...
- c语言中 #include < > 和include “ “的区别
一.引用的头文件不同 #include< >引用的是编译器的类库路径里面的头文件. #include" "引用的是你程序目录的相对路径中的头文件. 二.用法不同 #in ...
- c语言中14 3,C语言中的单精度和双精度浮点型的区别!3.14是哪种?3.14159呢?
3.14是单精度,3.14159是双精度. 两者区别如下: 一.指代不同 1.单精度:是指计算机表达实数近似值的一种方式. 2.双精度:此数据类型与单精度数据类型(float)相似,但精确度比floa ...
最新文章
- AI一分钟 | 传许家印已投资贾跃亭FF;腾讯将发布可接收微信的智能音箱;阿里确认研发自动驾驶技术...
- 干货 | 为你解读34篇ACL论文
- RTSP播放器网页web无插件直播流媒体音视频播放器EasyPlayer-RTSP实现支持H265编码格式过程介绍
- C/Cpp / const 用法
- 计算机怎么取消脱敏设置,一种敏感数据自适应的脱敏方法、系统技术方案
- LeetCode 第 197 场周赛(468/5273,前8.88%)
- python2.7 threading RLock/Condition文档翻译 (RLock/Condition详解)
- 电商促销海报PSD分层模板|创意合成,这样的设计越来越吃香!
- 龙星电脑横机制版软件_简用仓库管理软件v8.6.3-简用仓库管理软件电脑版下载...
- mysql 联表比对,MySQL联表查询详解/超详细mysql left join,right join,inner join用法分析比较...
- Mac系统如何删除.DS_Store文件且不再生
- JavaScript模态框实现
- html5 视频字幕制作工具,短视频如何添加字幕?10分钟学习5款视频字幕制作工具,干货!...
- linux 服务器 安装svn
- USB无线网卡和PCI-E无线网卡如何选择?
- Win7 开机后3分钟内硬盘等狂闪解决办法
- 如何用OCR文字识别软件将PDF转换成Excel
- 2021域名过期会引发哪些问题?说说常见弊端
- 2020.8.25 斗鱼Android开发二面面经
- 【JavaScript】浏览器