C语言中指针与函数的关联2(数组的降级)
2015-11-20 14:16
483 查看
上一篇讲过数组名发生降级的问题,说的还不够详细,这里我们给一份代码
这里我们看到arr的地址为002cfe48,p1的地址为002cfe70,p2为002cfe4c,由于arr首元素的地址为fe48当我们对其向后偏移一个字节,对arr实行了加法运算,数组发生降级,代表首元素的地址,换算成16进制,48+4=4c,得到的是p2=fe4c,而如果我们队arr进行取地址,因为&不会使数组发生降级的,arr有10个单位,每个单位4字节,所以70-48=28,换算成16进制,刚好为40。
这样我们就清楚地看到数组的降级,数组与指针的区别了。
int main() { int arr[10] = { 0 }; int *p1 = (&arr)+1; int *p2 = arr + 1; return 0; }然后我们进入调试,监视变量p1,p2,让程序走起来,监视结果如下:
这里我们看到arr的地址为002cfe48,p1的地址为002cfe70,p2为002cfe4c,由于arr首元素的地址为fe48当我们对其向后偏移一个字节,对arr实行了加法运算,数组发生降级,代表首元素的地址,换算成16进制,48+4=4c,得到的是p2=fe4c,而如果我们队arr进行取地址,因为&不会使数组发生降级的,arr有10个单位,每个单位4字节,所以70-48=28,换算成16进制,刚好为40。
这样我们就清楚地看到数组的降级,数组与指针的区别了。
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数