gpt4 book ai didi

C++数组查询

转载 作者:行者123 更新时间:2023-11-28 00:15:20 24 4
gpt4 key购买 nike

为什么我们可以这样做:

char* array = "String";

但不是

int* array = 1;

根据我的理解 * 表示地址,所以我真的不明白为什么我们可以给出一个非地址值,比如“String”。到 char* 数组。

最佳答案

char* array 表示array是一个变量,可以保存另一个对象(例如另一个变量或常量)的地址。

如果程序有"String",这意味着内存中某处实际上存在一个7个字符的数组,它保存着"String"的内容。

当您编写 array = "String"; 时,变量 array 将保存字母 'S' 的地址那个字符串。

这是因为 C++ 有一个规则,有时称为 array-pointer decay 这意味着如果您尝试在一个数组中使用一个数组(例如 "String")需要值的上下文,然后它会自动转换为指向该数组第一个元素的指针。

如果没有该规则,您将不得不编写 array = &("String"[0]); 。该规则最初包含在 C 中是为了避免在处理数组时必须在整个地方编写 &....[0],尽管事后看来它似乎带来了更多的痛苦而不是快乐。

转到 int* i = 1。你说过 i 可以保存 int 的地址,但你没有提供任何这样的地址。不是数组的变量不会自动转换为它们的地址。事实上 1 甚至不是一个变量。我们称它为 prvalue ,它没有任何与之关联的内存存储区域,因此它没有地址。要指向 1 的实例,您必须创建一个变量,例如:

int j = 1; int* i = &j;

关于C++数组查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30695397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com