设为首页 加入收藏

TOP

数组名和指针的区别(数组名不是指针,是数组首地址)
2017-02-08 08:16:45 】 浏览:9490
Tags:指针 区别 不是 地址

听了一堂C语言的课,那老师说:“数组名就是一个指向数组首地址的常量指针”。我上百度查了一些,有好多教程、书籍等,都持相同的观点。但我一直感觉——数组名不等于指针。


实践是检验真理的唯一标准,于此,有了以下内容。


首先,声明一个数组和一个常量指针并指向那个数组。


设问:一个整型指针的长度为4Byte,比较数组名的数据长度和指针的数据长度是否相等?


运行结果:p_arr的长度=4,arr的长度=12


结论:数组名应该不是指针。


设问:数组名不能作为左值,那常量指针呢?


运行结果:不报错


运行结果:报错——“=”做操作数必须左值 and 表达式必须是可修改的左值。


运行结果:p_arr的地址=002DF958,arr的地址=002DF964。


结论:数组名不是常量指针,更不是指向数组首地址的常量指针。


设问:常量指针能为左值,那常量呢?


运行结果:报错——“a”不能给常量赋值 and 表达式必须是可修改的左值。


结论:常量指针不是一个常量。


设问:数组名是一个常量吗?


运行结果:报错——常量上的“&” and 表达式必须为左值或者函数提示符。(数组名存在地址,而常量不存在)


运行结果:报错——常量上的“&” and 表达式必须为左值或者函数提示符。(与上一致)


运行结果:能正常运行,说明a和arr都有自己的存储空间。


运行结果:a的地址=0041F7FC,arr的地址=0041F814(二者不在同一块内存单元中)


结论:数组名不是一个常量,也不是一个用const限定变量所形成的常量。


设问:数组名是否完成等同于数组首地址?


运行结果:报错——“=”做操作数必须左值 and 表达式必须是可修改的左值。(和arr = arr;的结果一致)


运行结果:arr[0]的地址=002FFA34,arr的地址=002FFA34。(地址完全相等)


运行结果:&arr的长度=4,arr的长度=12。


结论:数组名应该就是数组首地址,只是当在使用sizeof运算符时,可能进行了隐式转换。(转换指代整个数组,既sizeof(arr)=数组中元素的个数 乘以 sizeof(arr[0])的值)


最后的结论:暂且认为数组名在一般情况下就是该数组的首地址,在使用sizeof运算符时,数组名指代自身数组的全部元素的地址。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spring MVC 前后端传值方式心得笔.. 下一篇GC.Collect如何影响垃圾回收

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目