数组本身的名称,存储在哪里

pHb*_*its 3 c memory-management

数组的名称如何存储在内存中?

例如,如果我写:

char arr[10];
Run Code Online (Sandbox Code Playgroud)

数组项从虚拟地址开始存储在内存中,虚拟地址&arr[0]实际上是arr的值,但是它arr自己存储在哪里?

静态多维数组的行也是如此:

char arr[10][20];
Run Code Online (Sandbox Code Playgroud)

arr本身也是arr [0],arr [1] .... arr [9]都没有地址本身.

那么名称存储在哪里?

mer*_*011 6

如果您指的是您声明的文字名称,除非您使用调试符号进行编译,否则通常会将其编译出来-g.

如果在堆栈上声明了某些内容,则机器代码通常将数组元素称为与帧指针的偏移量$ebp.

要回答您的隐含问题,对于堆栈上的数组,它不存在.机器代码不知道是什么arr.它只知道你正在使用偏移量(代码中的索引)来寻址内存区域.

这个问题对堆上的数组更有意义,因为现在你有一个指针(它有自己的地址),以及保存实际数组的存储器(存在于堆中,存储在指针内).

请考虑以下代码.

 char* arr = malloc(5);
Run Code Online (Sandbox Code Playgroud)

假设您使用调试符号进行编译,如果您查看&arr内部gdb,您将看到指针arr存储的地址.

如果在堆栈上创建指向数组的单独指针,则可以演示相同的内容.

 char arr[10];
 char* ptr = arr;
Run Code Online (Sandbox Code Playgroud)

在这里,您将看到它ptr具有单独的storage(p &ptr),并保存arr其值的地址,但&arr它本身等于其第一个元素的地址.