C 通过指针和地址复制对象
让我们使用一些指向结构的指针,如C 通过指针和地址复制对象,c,pointers,C,Pointers,让我们使用一些指向结构的指针,如tm: time_t timestamp = time(NULL); tm* now = localtime(×tamp); 要在自动内存中创建指向副本的指针,可以使用“按值复制”: tm copy = *now; tm* next = © // next points to a copy in memory 但是为什么这个快捷方式不将值复制到新的内存块?(gcc编译器) 这听起来可能微不足道,但我不确定背后的机制。为什么会
tm
:
time_t timestamp = time(NULL);
tm* now = localtime(×tamp);
要在自动内存中创建指向副本的指针,可以使用“按值复制”:
tm copy = *now;
tm* next = ©
// next points to a copy in memory
但是为什么这个快捷方式不将值复制到新的内存块?(gcc编译器)
这听起来可能微不足道,但我不确定背后的机制。为什么会有差异?与tm*next=&(*now)
下一个和现在都将指向包含结构tm
数据的相同内存位置
没有为要指向的next
分配新内存。使用tm*next=&(*now)
下一个和现在都将指向包含结构tm
数据的相同内存位置
没有为要指向的next
分配新内存。使用tm*next=&(*now)
下一个和现在都将指向包含结构tm
数据的相同内存位置
没有为要指向的next
分配新内存。使用tm*next=&(*now)
下一个和现在都将指向包含结构tm
数据的相同内存位置
没有为要指向的下一个分配新内存。指针,顾名思义,指向内存中的某个位置。它们不自行分配必要的内存。你必须自己做
在代码中,指针next
实际上指向内存中now
所在的位置。如果通过指针修改任何值,则实际上是在修改原始结构。指针就是这样工作的
如果要分配内存,请使用malloc
或calloc
。但是请记住,这样分配的内存必须是空闲的d
一旦分配了内存,就可以按值复制它
tm prev = ...// get the value
tm* now = calloc (1, sizeof (tm));
*now = prev; // copy by value
顾名思义,指针指向内存中的某个位置。它们不自行分配必要的内存。你必须自己做
在代码中,指针next
实际上指向内存中now
所在的位置。如果通过指针修改任何值,则实际上是在修改原始结构。指针就是这样工作的
如果要分配内存,请使用malloc
或calloc
。但是请记住,这样分配的内存必须是空闲的d
一旦分配了内存,就可以按值复制它
tm prev = ...// get the value
tm* now = calloc (1, sizeof (tm));
*now = prev; // copy by value
顾名思义,指针指向内存中的某个位置。它们不自行分配必要的内存。你必须自己做
在代码中,指针next
实际上指向内存中now
所在的位置。如果通过指针修改任何值,则实际上是在修改原始结构。指针就是这样工作的
如果要分配内存,请使用malloc
或calloc
。但是请记住,这样分配的内存必须是空闲的d
一旦分配了内存,就可以按值复制它
tm prev = ...// get the value
tm* now = calloc (1, sizeof (tm));
*now = prev; // copy by value
顾名思义,指针指向内存中的某个位置。它们不自行分配必要的内存。你必须自己做
在代码中,指针next
实际上指向内存中now
所在的位置。如果通过指针修改任何值,则实际上是在修改原始结构。指针就是这样工作的
如果要分配内存,请使用malloc
或calloc
。但是请记住,这样分配的内存必须是空闲的d
一旦分配了内存,就可以按值复制它
tm prev = ...// get the value
tm* now = calloc (1, sizeof (tm));
*now = prev; // copy by value
=
仅用于将数据从一个内存位置复制到另一个内存位置<代码>&
仅提供变量的地址<代码>*
仅解除对变量的引用。所有这些都不会以任何形式分配内存,也不会创建任何临时变量
所有内存分配都必须在C中明确说明。此处没有区别。=
仅用于将数据从一个内存位置复制到另一个内存位置<代码>&
仅提供变量的地址<代码>*
仅解除对变量的引用。所有这些都不会以任何形式分配内存,也不会创建任何临时变量
所有内存分配都必须在C中明确说明。此处没有区别。=
仅用于将数据从一个内存位置复制到另一个内存位置<代码>&
仅提供变量的地址<代码>*
仅解除对变量的引用。所有这些都不会以任何形式分配内存,也不会创建任何临时变量
所有内存分配都必须在C中明确说明。此处没有区别。=
仅用于将数据从一个内存位置复制到另一个内存位置<代码>&
仅提供变量的地址<代码>*
仅解除对变量的引用。所有这些都不会以任何形式分配内存,也不会创建任何临时变量
所有内存分配都必须用C明确说明。这里没有区别。您的第一个示例将在堆栈上为变量copy
保留内存。
然后它将now
的内容复制到新的内存位置,最后让next
指向该内存位置
tm copy = *now;
tm* next = ©
第二个示例将不保留任何新内存;相反,它只需将对象的地址(&
)指定给(*
)即可
它们之所以不同,是因为C从不进行任何“自动逻辑”内存分配。
你得到了你想要的:如果你想要一个变量的内存(如