数组名和数组名取地址的区别


Posted on December 3, 2013


一直困惑了很久的一个问题,今天终于解决了,参考:http://blog.csdn.net/daniel_ice/article/details/6857019

#include <stdio.h>

int a[2] = {1,2};
int main(){
        printf("a = %p\n", a); // I
        printf("&a = %p\n", &a); // II
        printf("a + 1 = %p\n", a + 1);// III
        printf("&a + 1 = %p\n", &a + 1);// IV

        return 0;
}
//结果如下(Windows):
//a = 01137034
//&a = 01137034
//a + 1 = 01137038
//&a + 1 = 0113703C

在C中, 在几乎所有使用数组的表达式中,数组名的值是个指针常量,也就是数组第一个元素的地址。 它的类型取决于数组元素的类型: 如果它们是int类型,那么数组名的类型就是“指向int的常量指针“。

看到这里我想应该就知道为什么 会有I 和 III式的结果了。

对于II 和 IV 则是特殊情况,在《C和指针》p142中说到,在以下两中场合下,数组名并不是用指针常量来表示,就是当数组名作为sizeof操作符和单目操作符&的操作数时。 sizeof返回整个数组的长度,而不是指向数组的指针的长度。 取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某个指针常量的指针。

所以&a后返回的指针便是指向数组的指针,跟a(一个指向a[0]的指针)在指针的类型上是有区别的。


标签:C语言

其它推荐日志:

如何用c#发邮件

学习.Net经典网站推荐

数据类型转换(for c++)

Android环境搭建笔记

VirtualBox启动镜像蓝屏提示intelppm.sys的解决方法

技巧:Adobe CS3安装程序在2003和XP SP1下无法安装的解决办法

找到一个不错的blockquote样式

Excel2003生成Excel.dll的方法

今天发现了一个mshta.exe进程,没见过。。

C#获取当前IE地址栏的url

只可以数字的正则表达式!

vs2008【断点无效】解决方法

介绍一个web2.0站点模板

BitComet Beta 20070528

C#中的“装箱”与“拆箱

SyntaxHighlighter, a fully functional self-contained code syntax highlighter!

怎样彻底删除windows messenger?

Vista技巧:禁用Vista中的移动中心

EXISTS与IN的区别

AccessDataSource中参数传递的问题

ASP.NET 2.0中嵌套母版页的应用

把字符串时间转换为timestamp的一个方法(php)

必须学会的几个网络测试命令

Vista 及 Windows 2008 server安装后的删除

IIS装framework 2.0

什么叫有源音箱?

System.UnauthorizedAccessException: 拒绝访问

计算某一天是星期的程序!

asp错误0x80004005的解决方法!

浏览器滚动条的参数总结

Mysql中文乱码

HTML转义字符

双网卡上网【人工设置路由】

关于session的问题集锦解决方案(PHP)

C#编码标准--编码习惯(转)

WebOS:网络操作系统

什么是AJAX?

ASP.NET 2.0中CSS失效解决方案

datalist分页的方法

无意中发现了另外一种开发AJAX的方法,ajax.dll


Search
最新评论
推荐日志
微信扫一扫