C语言数组的地址怎么看?

不行, unsigned char *ptr; 你这个只是一个局部变量函数执行完就消失了。

ptr不是变量,怎么能加地址符,他可以理解成数组名或数组首地址

}
 我是鹏鸟,热衷回答有关C语言学习疑问。本回答为鹏鸟原创,喜欢的话欢迎转发哦! 根据题主的描述,我改写为一段C语言代码,如下:很简单的一段C语言代码,定义了一个一维数组,数组有3个元素。 第一个printf先输出了第一个元素和第二个元素的地址; 第二个printf输出了第一个元素的地址和第二个元素的地址的地址差,运行结果如下:正如题主所言,第一个元素的地址是22feb4,第二个元素的地址是22feb8。
两者相减,也就是 22feb8 - 22feb4 应该等于 4 才对啊,为何是1?其实编译器做了一个处理,也就是在22feb8 - 22feb4 时多了一个步骤,如下:(22feb8 - 22feb4) / sizeof(int) = (22feb8 - 22feb4) / 4 = 1 看到没?你看上去好像是22feb8 - 22feb4,其实多了一个除以 sizeof(int)的步骤。
在C语言中,地址相减并不是取地址之间间隔多少个字节,而是取地址之间间隔多少个元素,而一个元素可能占用多个字节。我再问下,如果代码中的数组arr不是int类型,而是char类型,或者是float类型,那么结果又是多少?#####一个是逻辑上的概念一个是物理概念。
打个比方,有一个四米长的过道,均匀的放了四把椅子,编号0到3,0号和1号,地址差一,0号座位的起点到1号座位的起点的物理间距长度是一米。现在,把四个座位减少为两个,每个椅子变两倍大,编号为0和1,座位号差为一,但物理长度间距差变为2。也就是说,以物理地址(内存)来计算的话,是用相差的单位(椅子的编号)乘以你椅子的长度。
决定椅子长度的是你的数据类型,但是从运行时寻址来说依然是拿相差的单位乘以数据长度。#####数组本来就是栈,是一片连续的固定内存区域,这是最原始的设定,因为数组中的元素就是按照这个规定存放的,所以相邻得数组元素差距一个类型大小的空间。
}

我要回帖

更多关于 在c语言中数组名代表首地址 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信