c - C语言中&array和&array[0]的区别
问题描述
考虑到这个声明:
整数数组[] = ....;
我知道&array[0]将第一个元素的地址作为其值。
但是&array呢?我在我的程序中尝试了这个,它还返回了第一个元素的地址。那么有什么区别呢?
解决方案
尝试“之间的差异'A'
,65LL
和65.0
?
所有的值都彼此相等(假设为 ASCII),但它们的类型不同,并且可能有不同的位宽和编码。
&array
现在“和之间的差异&array[0]
”
两者都具有彼此相等的值作为指向内存中相同位置的点,但它们的类型不同:指向int
数组的指针与指向int
.
int a[] = {1,2,4};
// &a is a `pointer to array 3 of int`
这种类型差异的一个共同影响是指针数学
printf("%p\n", (void*) (&a[0] + 1)); // next `int` address
printf("%p\n", (void*) (&a + 1)); // one past end of array address
[高级]:虽然这两个指针通常使用相同的编码和大小,但在 C 中,它们也可能在编码和大小上有所不同,但仍指向相同的地址。
推荐阅读
- python - InvalidSchema 没有连接适配器 Python 请求
- grpc - gRPC 的 Trailer 与通常的标头有何不同
- javascript - 如何使用机器人在 Discord 上创建“仅限媒体”频道?(JS)
- java - Spring 在彼此内部注入一个接口的不同实现
- google-sheets - 如何平均来自非空且非零的特定单元格的值?
- processing - saveframe() 将屏幕截图保存到文件中,但无法读取处理中的图像文件
- javascript - 正确的 id 是如何发送到 onDelete 的?我没有在 onClick 中发送任何 id,那么 onDelete 是如何知道传递给它的 id 的呢?
- python - matplotlib set_data()不更新下一次绘图()的绘图
- if-statement - 谷歌表格 - 基于另一个表格中单元格值的条件格式 - 自定义公式
- sql-server - EF Core 3.1 有没有身份的身份字段/删除身份增量