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

Why the address of an array can have a negative value?

我写了这个显示存储数组地址的程序:

#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语言有关吗?

Why there are negative addresses in memory?

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


不要使用 mis-matched 说明符 "%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

一个指针有整型属性,但是指针类型不一定报整型。它是实现定义的。


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