美文网首页
C语言-数组名和&数组名的区别

C语言-数组名和&数组名的区别

作者: ngugg | 来源:发表于2019-01-03 16:33 被阅读7次

参考:https://blog.csdn.net/jingzi123456789/article/details/66478310

实测:

#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    
    int a[5] = {1,2,3,4,5};
    
    int *p;
    printf("    a = %p\n",a); // 表示数组首元素的地址
    printf("a + 1 = %p\n",a + 1); // 表示数组第二个元素的地址
    printf("a + 2 = %p\n",a + 2); // 表示数组第三个元素的地址
    printf("a + 3 = %p\n",a + 3); // 表示数组第四个元素的地址
    printf("a + 4 = %p\n\n",a + 4); // 表示数组第五个元素的地址
    
    printf("      *a = %d\n",*a); // 数组第一个元素的值
    printf("*(a + 0) = %d\n",*(a + 0)); // 数组第一个元素的值
    printf("*(a + 1) = %d\n",*(a + 1)); // 数组第二个元素的值
    printf("*(a + 2) = %d\n",*(a + 2)); // 数组第三个元素的值
    printf("*(a + 3) = %d\n",*(a + 3)); // 数组第四个元素的值
    printf("*(a + 4) = %d\n",*(a + 4)); // 数组第五个元素的值
    printf("*(a + 5) = %d\n\n",*(a + 5)); // 未初始化的值
    
    printf("&a[0] = %p\n",&a[0]); // 表示数组首元素的地址
    printf("&a[1] = %p\n",&a[1]); // 表示数组第二个元素的地址
    printf("&a[2] = %p\n",&a[2]); // 表示数组第三个元素的地址
    printf("&a[3] = %p\n",&a[3]); // 表示数组第四个元素的地址
    printf("&a[4] = %p\n\n",&a[4]); // 表示数组第五个元素的地址
    
    printf("a[0] = %d\n",a[0]); // 数组第一个元素的值
    printf("a[1] = %d\n",a[1]); // 数组第二个元素的值
    printf("a[2] = %d\n",a[2]); // 数组第三个元素的值
    printf("a[3] = %d\n",a[3]); // 数组第四个元素的值
    printf("a[4] = %d\n\n",a[4]); // 数组第五个元素的值
    
    
    p = a;
    printf("p = %p\n",p);
    p = &a[0];
    printf("p = %p\n",p);
    printf("\n");
    printf("&p = %p\n",&p);
    printf("&a = %p\n",&a);
    printf("&a + 1 = %p\n",&a + 1);
    printf("&a[0] + 1 = %p\n\n",&a[0] + 1); // 表示数组第二个元素的地址
    
    printf("&a[0] = %p\n",&a[0]);
    
    printf("sizeof(a) = %lu\n",sizeof(a));
    printf("sizeof(&a) = %lu\n",sizeof(&a));
    
    if (a == &a[0]) {
        printf("表示的为同一个内存地址\n");
    }


    return 0;
}

打印结果:

    a = 0x7ffeefbff520
a + 1 = 0x7ffeefbff524
a + 2 = 0x7ffeefbff528
a + 3 = 0x7ffeefbff52c
a + 4 = 0x7ffeefbff530

      *a = 1
*(a + 0) = 1
*(a + 1) = 2
*(a + 2) = 3
*(a + 3) = 4
*(a + 4) = 5
*(a + 5) = 32766

&a[0] = 0x7ffeefbff520
&a[1] = 0x7ffeefbff524
&a[2] = 0x7ffeefbff528
&a[3] = 0x7ffeefbff52c
&a[4] = 0x7ffeefbff530

a[0] = 1
a[1] = 2
a[2] = 3
a[3] = 4
a[4] = 5

p = 0x7ffeefbff520
p = 0x7ffeefbff520

&p = 0x7ffeefbff508
&a = 0x7ffeefbff520
&a + 1 = 0x7ffeefbff534
&a[0] + 1 = 0x7ffeefbff524

&a[0] = 0x7ffeefbff520
sizeof(a) = 20
sizeof(&a) = 8
表示的为同一个内存地址
Program ended with exit code: 0

相关文章

  • C语言-数组名和&数组名的区别

    参考:https://blog.csdn.net/jingzi123456789/article/details/...

  • C语言中对数组和指针sizeof求值

    C语言中对数组名sizeof(数组名)得到的是 数组的大小 (单位是字节);对 指针sizeof(指针)得到的是 ...

  • c语言中数组名和指针的区别

    int a[]; a为数组首元素的地址 &a为整个数组的地址 a和&a的区别在于指针运算 a+1 -->(unsi...

  • C语言指针和数组名区别

    最近在重新学习C语言,发现在学指针的时候,写到函数就会出现各种问题,百思不得其解,而且我也不太清楚指针和数组到底是...

  • 第8章,数组

    一维数组 数组名 在 C中,几乎所有使用数组名的表达式中,数组名的值是一个指针常量(所以你不能给数组名重新赋一个新...

  • C++数组名和指针的区别

    主题思想:数组名绝对不是指针变量,而是代表数组这种数据结构,只是可以在参与运算时转化为指针常量 概念:指针,指针常...

  • c语言数组名和指针的关系

    一.数组名和指针 二.数组下标是否能为负数 可以的,编译器对这块没有做要求,所以是可以的。 三. 定义数组指针 四...

  • C语言基础5-数组

    声明一个数组:数据类型 数组名称[长度]; C语言中的数组初始化是有三种形式的,分别是:1、 数据类型 数组名称[...

  • 数组名 & 指针

    先来看看如下示例代码: 输出: 0x7fffaeaff340 0x7fffaeaff340 0x7fffaeaff...

  • 可变长数组(Arrays of Variable Length)

    早期C语言中定义数组: 类型说明符 数组名 [常量表达式]; type arrayName [ arraySize...

网友评论

      本文标题:C语言-数组名和&数组名的区别

      本文链接:https://www.haomeiwen.com/subject/zpfqrqtx.html