小编Jia*_*eng的帖子

如何理解指针数组的地址?

我有一个简单的程序:

int main(){
    int *p[2];

    p[0] = new int;
    p[1] = new int;
    *p[0] = 10;
    *p[1] = 12;

    delete p[0];
    delete p[1];
}
Run Code Online (Sandbox Code Playgroud)

编译:

g++ test.cpp -g -fno-stack-protector -o test
Run Code Online (Sandbox Code Playgroud)

使用 GDB 调试(在变量销毁前中断):

(gdb) x p
0x7fffffffdfc0: 0x5556aed0
(gdb) x &p
0x7fffffffdfc0: 0x5556aed0
(gdb) x p+1
0x7fffffffdfc8: 0x5556aef0
(gdb) x &p+1
0x7fffffffdfd0: 0xffffe0d0
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  1. 为什么p&p?一样?我认为p是指数组的起始地址,即&p[0]while&p存放数组的地址。我以为他们没有任何关系。
  2. 然后作为pequals &p,什么定义了行为+1?为什么p+1&p[1],但是&p+1是之后的下一个地址int …

c++ gdb pointers

6
推荐指数
1
解决办法
86
查看次数

为什么ELF幻数中没有16位信息?

在ELF-header中,value e_ident[EI_CLASS]可以是1或2,表示32位操作或64位操作系统.但是从历史上我们知道ELF首次出现在1993年发布的Solaris 2.0中.然而,广泛使用的32位处理器Pentium Pro直到1995年才出现.那么为什么ELF头没有关于16位甚至是16位的信息8位信息?

linux magic-numbers elf

0
推荐指数
1
解决办法
423
查看次数

标签 统计

c++ ×1

elf ×1

gdb ×1

linux ×1

magic-numbers ×1

pointers ×1