代码之家  ›  专栏  ›  技术社区  ›  TheKing

为什么数组的地址可以有负值?

  •  1
  • TheKing  · 技术社区  · 2 年前

    我编写了一个程序,显示存储阵列的地址:

    #include <stdio.h>
    
    int main() {
    
        int n;
        scanf("%d", &n);
        int L[100];
        for (int i = 0; i < n; i++) {
            printf("L[%d]=", i);
            scanf("%d", &L[i]);
        }
        
        printf("The address of L : %d \n", L);
        return 0;
    }
    

    我注意到,有时程序会给出我不太理解的否定地址。

    为什么内存中有负数地址?
    这与C语言有关吗?

    1 回复  |  直到 2 年前
        1
  •  7
  •   chux    2 年前

    为什么内存中有负数地址?

    这是一个不受支持的问题,因为输出基于损坏的代码。


    不要使用不匹配的说明符 "%d" 打印地址和地址 未定义的行为 (UB)。 %d 是为了 int 使用 "%p" 具有 void * .地址输出的格式取决于实现。我从未遇到过报告负面地址的实现。

    printf("The address of L : %p\n", (void *) L);
    

    您可能会得到如下输出:

    The address of L : 0xffffca70
    // or 
    The address of L : ffff:ca70
    // or 
    The address of L : Red:70
    

    A. 指针 具有类似整数的属性,但指针类型不一定像整数一样报告。它是实现定义的。


    节省时间-同时启用所有警告。