考虑到这个声明:
int 数组[] = ....;
我知道&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`
Run Code Online (Sandbox Code Playgroud)
这种类型差异的一个常见影响是指针数学
printf("%p\n", (void*) (&a[0] + 1)); // next `int` address
printf("%p\n", (void*) (&a + 1)); // one past end of array address
Run Code Online (Sandbox Code Playgroud)
[高级]:虽然这两个指针通常采用相同的编码和大小,但在 C 中,它们的编码和大小也可能不同,但仍然指向相同的地址。
| 归档时间: |
|
| 查看次数: |
790 次 |
| 最近记录: |