我试图了解Java中对象创建背后的实际过程-并且我想使用其他编程语言。
假定Java中的对象初始化与对C中的结构使用malloc相同是错误的吗?
例:
Foo f = new Foo(10);
Run Code Online (Sandbox Code Playgroud)
typedef struct foo Foo;
Foo *f = malloc(sizeof(Foo));
Run Code Online (Sandbox Code Playgroud)
这就是为什么说对象位于堆而不是堆栈上的原因吗?因为它们本质上只是数据指针?
假设我们有一个结构...
struct node{
int data;
struct node *next;
};
struct node *new_node = malloc(sizeof(node));
struct node *temp_node = new_node;
Run Code Online (Sandbox Code Playgroud)
如果我使用免费...
free(temp_node);
Run Code Online (Sandbox Code Playgroud)
new_node 也释放(因为地址不再存在)还是 new_node 简单地指向 NULL(在这种情况下我也需要释放 new_node)?
干杯!
我知道考虑到计算机的工作速度,这听起来可能是一个愚蠢的问题,但是说 RAM 中的某个地址在物理上更靠近主板上的 CPU,与位于尽可能远离 CPU 的内存地址相比,与最远的内存地址相比,这对访问较近的内存地址的速度有影响吗?
我注意到的一些事情:例如,在 C 中,如果您在函数中有一个本地数组
*int returnArr() {
int arr[5] = {0};
return arr;
}
Run Code Online (Sandbox Code Playgroud)
显然这不会编译。C 会告诉你你正在尝试返回一个局部变量。然而在 Java 中,同样可以做到......
int[] returnArr() {
int[] arr = new int[5];
return arr;
}
Run Code Online (Sandbox Code Playgroud)
它不会引起任何问题?为什么是这样?为什么Java可以,而C不行?
我想知道以下代码为何合法
char *string = "hello";
string = "changed";
string = "changed again";
Run Code Online (Sandbox Code Playgroud)
这不会对编译器造成任何问题。
但是我给人的印象是,初始化为指针的char数组(char * string与char string []相对)是只读的,不能被覆盖吗?