为什么数组的地址可以有负值?
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
一个指针有整型属性,但是指针类型不一定报整型。它是实现定义的。
节省时间 - 也启用所有警告。
我写了这个显示存储数组地址的程序:
#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
一个指针有整型属性,但是指针类型不一定报整型。它是实现定义的。
节省时间 - 也启用所有警告。