数组(arr)和取地址数组(&arr)区别

今天主要谈谈数组和取地址数组的区别

    以int arr[10];为例

arr是数组名,它就是首元素地址,那&arr是什么?

我们先看一段代码:

#include <stdio.h> 
int main() {    
    int arr[10] = {0};    
    printf("%p\n", arr);    
    printf("%p\n", &arr);    
    return 0; 
}

运行结果如下:

Q0FG64]8S$D{U5~4ZIPI_$I.png

看起来并没有什么不一样,但是这两个还是有区别的,我们再来看一段代码:

#include <stdio.h> 
int main() {    
    int arr[10] = { 0 };    
    printf("arr = %p\n", arr);    
    printf("&arr= %p\n", &arr);
    printf("arr+1 = %p\n", arr+1);    
    printf("&arr+1= %p\n", &arr+1);    
    return 0; 
}

image.png

但是我们在给两个指针加一的时候,我们发现地址不相同了,根据计算我们发现,&arr+1刚好是整个数组的下一个字节,也就是说&arr是整个数组地址,而arr只是首元素地址。

猜你喜欢

转载自blog.51cto.com/14442714/2498906
Arr