考虑到这个声明:
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 次 |
最近记录: |