如何将一个指针指向的地址存储到另一个指针?
Posted
技术标签:
【中文标题】如何将一个指针指向的地址存储到另一个指针?【英文标题】:How to store the address that a pointer points to to another pointer? 【发布时间】:2021-02-10 12:14:39 【问题描述】:此代码旨在使指针 c 指向指针 a 指向的地址。 我无法理解这个表达式:“ char* c= (char*)&a ”。 有人可以澄清一下吗?
string* a =new string;
std::cin >> *a;
char* c= (char*)&a;
delete a;
【问题讨论】:
这个表达没什么意义。你的意思是const char* c = a->c_str();
?
a
被删除后,您不能使用c
中存储的地址
char* c= (char*)&a;
看起来是个大错误。使用 C-cast,您可以将几乎所有内容“出售”给编译器(使其保持沉默),但最终您仍然可以获得 U.B. (迟早)。 (而且,如果没有编译器投诉,找到它会变得更加困难。)
不同的问题,类似的误解:***.com/q/66027913/4117728
指针指向的地址是它的值,而不是它的地址。要获取指针a
指向的地址,您可以简单地读取a
,而不是&a
。要将指针a
指向的地址存储在c
中,您可以使用char *c = (char *)a;
,但这没有多大意义。请描述您的期望或您希望通过代码实现的目标。
【参考方案1】:
一个指针指向的地址如何存储到另一个指针?
你可以复制它:
T* a = some_address;
T* b = a; // copied the address from a to b
这个表达我看不懂:
char* c= (char*)&a
这声明了一个char*
类型的变量,它是一个指向char
的指针。变量的名称是c
。该变量使用表达式(char*)&a
进行初始化。
一元&
是地址运算符。当应用于左值时,它会产生由左值命名的对象的地址。在这种情况下,您将获得变量a
的地址。注意变量a
的地址与a
指向的动态对象的地址不同。因为a
的类型是string*
,所以指向a
的指针的类型是string**
。
(char*)a
是一种显式转换(又名 C 样式转换)。在这种情况下,它执行从string**
到char*
的重新解释转换。如果没有上下文,这种转换似乎没有意义,但无论如何它都会使示例格式正确。不要在 C++ 中使用 C 风格的强制转换。
附:避免不必要的动态分配。如果string
是std::string
,那么几乎没有理由动态分配它。
我试图让 c 指向字符串 *a 中第一个字母的内存地址。我该怎么做?
a
中根本没有字母。 a
仅包含 string
对象的地址。
如果您想指向存储在由a
指向的字符串管理的缓冲区中的第一个字符 - 假设string
是std::string
,那么您可以通过a
间接并使用std::string
的data
成员函数:
char* c = a->data();
【讨论】:
格式正确,因为它是指向char
的指针,而int*
的情况会有所不同,不是吗?也许澄清一下
@largest_prime_is_463035818 演员阵容仍然很好。在这种情况下,尝试通过重新解释的指针访问内存将是 UB。
哦,对了。我不知道 OP 的意图是什么,但如果他们想获得指向 c 字符串的指针,他们就走错了路。您已经解释过了,我只是不确定“格式良好”是否会引起误解。没关系,你已经有我的投票了
我试图让 c 指向字符串 *a 中第一个字母的内存地址。我该怎么做?以上是关于如何将一个指针指向的地址存储到另一个指针?的主要内容,如果未能解决你的问题,请参考以下文章