声明一个指针变量,内存是分配给指针的名称还是指针的地址?
to declare a pointer variable, does memory assign to the pointer's name or pointer's address?
内存是分配给指针的名字还是指针的地址?
我们可以在没有任何变量声明的情况下将内存分配给特定的合法地址(例如:0x7fff12345678),还是可以声明指针变量并分配内存但具有特定的合法地址?
当你使用malloc
时,在堆上分配一块内存(如果malloc
成功)并且指针指向分配内存的开始(假设你使用 pointer = malloc(...)
而不是简单地 malloc(...)
).
为了回答您的问题,让我们看一段代码,好吗?那样的话,恕我直言,解释场景会更容易。
int * p = NULL; //define a pointer, set it to NULL
p = malloc(sizeof*p); //allocation, assume success
....
free(p); //de-allocation
这里,如你所见,p
是一个指向int
的指针。代码中
- 首先定义
p
并初始化为NULL
.
malloc()
被调用,考虑到成功案例,returned 内存 地址 被分配给 p
。因此,现在,p
指向分配的内存。
- 最后一次调用
free()
,分配的内存块被释放(不能再使用)。
所以,回答你的问题:
memory is assigned to a variable -what identified by name- or assigned to an memory address -what identified by number?
内存地址(本身就是一个数字)通常分配给一个变量。换句话说,内存以内存地址的形式分配给正在调用malloc()
的进程。
FWIW,如果您不从 malloc()
收集 returned 指针,则无法访问 (if) 分配的内存。您需要在某个变量中收集 malloc()
的 return 值。
这是一个地址。一个指针指向(或更好地存储)该地址(这是分配内存的起始地址)。
通过取消引用指针,您 set/get 存储在内存中的值(从该地址开始)。
你的问题意义重大,剂量也很大。如果你不理解这个重要的概念,你就不能用 C 编程。
根本没有分配内存。分配内存的地址。
计算机不处理变量名。变量名,无论是什么,仅用于帮助您在编写程序时引用内存,并由编译器了解您希望程序如何工作。
处理器不处理名称或字符串。当你分配一些东西时,你通常会返回一个指向内存地址的指针。指针的名称无关紧要;地址和分配的内存量:这才是最重要的。操作系统决定是否满足你的内存分配请求。除非你的程序是一台机器上唯一的 运行(即你自己写一个 OS),否则你不能假设地址为空并通过指针在那里写任何你想要的东西(那将以泪水告终)。即使在那种情况下,您也会因硬件映射而受到地址限制。
编译程序(发布模式)后,指针名称和变量名称将丢失,程序只处理内存地址。
铌。当您被建议 使用好的变量名 .. 时,这并不意味着您必须这样做才能让处理器满意。你应该只是因为你的代码可能必须由其他人阅读或维护。有意义的变量名对于人类阅读是必要的。
举个例子
主要()
{
// 这为 A、B 分配内存(通常在堆栈上)
char *A,*B;
//此时A和B完全没有定义值。因此,进行此分配会将位于 B 的任何未知值放入 A.
A=B; //A and B have same address(point to-location) but different name,
// 这分配了 10 个字节并将这些字节的位置存储在 A 中。
A=new char[10]; //is the allocation, matter of the name (A as string) or the location (A as address)
// 这分配了 20 个字节并将这些字节的位置存储在 B 中。
B=new char[20];
// 这完全是不可预测的,很可能搞砸了一些东西会在路上出现。
A[18]='C';//is this really OK or we have potentially hidden error?
}
针对您的问题:
When we have memory allocation or memory deallocation in Code, memory is assigned to what?
1- A pointer's name (or equally the any name addressing related to compiler)
or
2- A pointer's address (what we can usually dereference it and get memory content) ?
在 C 中,内存地址存储在为指针分配的内存中。
in other word: could we memory allocation to specific legal address (e.g: 0x7fff12345678) without any variable declaration?
要更好地理解发生的事情,您确实需要学习汇编语言。可以在没有任何内存位置的情况下分配内存并存储在寄存器中。
我的回答是:
a) 分配给地址的内存,换句话说,用于内存分配 int[10] 到特定的合法地址(例如:0x7fff12345678)而无需任何 int 变量声明,:我们可以写
*reinterpret_cast<int**>( 0x7fff12345678)=new int[10];
b) 在示例中,在这一行中:
A[18]='C';
我们有潜在的内存错误,因为分配 "A=B",在 B 的内存分配之前,不要对 A 进行任何更改。
内存是分配给指针的名字还是指针的地址? 我们可以在没有任何变量声明的情况下将内存分配给特定的合法地址(例如:0x7fff12345678),还是可以声明指针变量并分配内存但具有特定的合法地址?
当你使用malloc
时,在堆上分配一块内存(如果malloc
成功)并且指针指向分配内存的开始(假设你使用 pointer = malloc(...)
而不是简单地 malloc(...)
).
为了回答您的问题,让我们看一段代码,好吗?那样的话,恕我直言,解释场景会更容易。
int * p = NULL; //define a pointer, set it to NULL
p = malloc(sizeof*p); //allocation, assume success
....
free(p); //de-allocation
这里,如你所见,p
是一个指向int
的指针。代码中
- 首先定义
p
并初始化为NULL
. malloc()
被调用,考虑到成功案例,returned 内存 地址 被分配给p
。因此,现在,p
指向分配的内存。- 最后一次调用
free()
,分配的内存块被释放(不能再使用)。
所以,回答你的问题:
memory is assigned to a variable -what identified by name- or assigned to an memory address -what identified by number?
内存地址(本身就是一个数字)通常分配给一个变量。换句话说,内存以内存地址的形式分配给正在调用malloc()
的进程。
FWIW,如果您不从 malloc()
收集 returned 指针,则无法访问 (if) 分配的内存。您需要在某个变量中收集 malloc()
的 return 值。
这是一个地址。一个指针指向(或更好地存储)该地址(这是分配内存的起始地址)。
通过取消引用指针,您 set/get 存储在内存中的值(从该地址开始)。
你的问题意义重大,剂量也很大。如果你不理解这个重要的概念,你就不能用 C 编程。
根本没有分配内存。分配内存的地址。
计算机不处理变量名。变量名,无论是什么,仅用于帮助您在编写程序时引用内存,并由编译器了解您希望程序如何工作。
处理器不处理名称或字符串。当你分配一些东西时,你通常会返回一个指向内存地址的指针。指针的名称无关紧要;地址和分配的内存量:这才是最重要的。操作系统决定是否满足你的内存分配请求。除非你的程序是一台机器上唯一的 运行(即你自己写一个 OS),否则你不能假设地址为空并通过指针在那里写任何你想要的东西(那将以泪水告终)。即使在那种情况下,您也会因硬件映射而受到地址限制。
编译程序(发布模式)后,指针名称和变量名称将丢失,程序只处理内存地址。
铌。当您被建议 使用好的变量名 .. 时,这并不意味着您必须这样做才能让处理器满意。你应该只是因为你的代码可能必须由其他人阅读或维护。有意义的变量名对于人类阅读是必要的。
举个例子
主要() { // 这为 A、B 分配内存(通常在堆栈上)
char *A,*B;
//此时A和B完全没有定义值。因此,进行此分配会将位于 B 的任何未知值放入 A.
A=B; //A and B have same address(point to-location) but different name,
// 这分配了 10 个字节并将这些字节的位置存储在 A 中。
A=new char[10]; //is the allocation, matter of the name (A as string) or the location (A as address)
// 这分配了 20 个字节并将这些字节的位置存储在 B 中。
B=new char[20];
// 这完全是不可预测的,很可能搞砸了一些东西会在路上出现。
A[18]='C';//is this really OK or we have potentially hidden error?
}
针对您的问题:
When we have memory allocation or memory deallocation in Code, memory is assigned to what?
1- A pointer's name (or equally the any name addressing related to compiler)
or
2- A pointer's address (what we can usually dereference it and get memory content) ?
在 C 中,内存地址存储在为指针分配的内存中。
in other word: could we memory allocation to specific legal address (e.g: 0x7fff12345678) without any variable declaration?
要更好地理解发生的事情,您确实需要学习汇编语言。可以在没有任何内存位置的情况下分配内存并存储在寄存器中。
我的回答是:
a) 分配给地址的内存,换句话说,用于内存分配 int[10] 到特定的合法地址(例如:0x7fff12345678)而无需任何 int 变量声明,:我们可以写
*reinterpret_cast<int**>( 0x7fff12345678)=new int[10];
b) 在示例中,在这一行中:
A[18]='C';
我们有潜在的内存错误,因为分配 "A=B",在 B 的内存分配之前,不要对 A 进行任何更改。