当前位置: 首页 > 知识库问答 >
问题:

数组中的C等运算符

轩辕欣可
2023-03-14
const char ca[]="test";
const char cb[]="test";

const char *pca="test"; //(*)
const char *pcb="test";

cout<<(ca==cb)<<endl; //0
cout<<(pca==pcb)<<endl; //1

我对这个结果很困惑。

ca cb是不同的对象,当处理ca==cb时,它会比较第一个元素的地址,所以

但是我不明白< code>pca pcb的行为。

(*)是否等于

const char temp[]="test";
const char *pca = temp;

?

“测试”是一个对象吗?pcapcb都指向这个物体的第一个元素?

共有1个答案

申查猛
2023-03-14
const char ca[]="test";
const char cb[]="test";

这将创建名为cacb的新变量,大到足以保存初始化(而不是赋值)中给定的字符串文字中的字符和终止符,然后将文字字符串的内容复制到每个变量中。

const char *pca="test"; //(*)
const char *pcb="test";

这只是将字符指针设置为指向给定的字符串文字。一个实现可以自由地为这些文字使用相同的内存,有效地为多种目的混淆了内存。它可以这样做而不受惩罚,因为无论如何尝试修改字符串文字都是未定义的行为。

关于您关于指针等效于以下内容的最后一点:

const char temp[]="test";
const char *pca = temp;

事实并非如此。pca变量现在指向允许您修改的内存(通过temppca或

还要记住,此字符串文字别名可能比最初想象的更微妙。代码段:

cout << a << "is " << "invalid\n";
cout << b << "is " << "valid\n";

可能最终只有两个字符串文本存储在内存中:

Addr:
  0   1     2      3   4   5   6   7   8   9  10   11   12
+---+---+-------+----+---+---+---+---+---+---+---+----+----+
| i | s | <spc> | \0 | i | n | v | a | l | i | d | \n | \0 |
+---+---+-------+----+---+---+---+---+---+---+---+----+----+

使用:

  • <代码>是

而且,如果其他代码段需要 id\n,它可以只使用地址 9。

 类似资料:
  • 问题内容: 为什么最后一个语句无法编译为错误:,并且有一种方法可以修改结构或扩展运算符以对嵌套数组(或字典)执行相等性检查? 问题答案: 更新: 条件一致性已在 Swift 4.1中 实现 。 特别是: 现在,标准库类型Optional,Array和Dictionary的元素类型符合Equatable时,它们便符合Equatable协议。… (来自Swift CHANGELOG)。 现在可以任意嵌

  • 上一个小节我们对 C 语言的运算符有了一个基本的了解,这节课我们来详细的看下运算符中的算术运算符: 1. 算数运算符 算数运算符是用来进行算数运算的符号,主要包含以下几个符号: 运算符 作用 示例 = 赋值 a=1 + 加法或者正号 a+b, +a - 减法或者负号 a-b, -a * 乘法 a*b / 除法 a/b % 取余数 a%b ++ 自加 ++a, a++ – 自减 –a, a– 2.

  • 当我运行这段代码时,我得到以下错误截图 50:7:错误:与“操作员”不匹配

  • 本文向大家介绍计算C ++中数组中的素数,包括了计算C ++中数组中的素数的使用技巧和注意事项,需要的朋友参考一下 给我们一个数字数组。目的是找到该数组中素数的计数。 质数是可以被1和数字本身整除的数。它只有两个因素。我们将检查从第一个元素到最后一个元素是否为质数,并增加迄今发现的质数。 要检查数字N是否为质数,请检查[2到N / 2]范围之间的数字是否将N整除。如果是,则它不是质数。否则,它是首

  • 问题内容: $test = array(‘hi’); $test += array(‘test’,’oh’); var_dump($test); PHP中的数组意味着什么? 问题答案: 引用PHP语言操作员手册 +运算符返回添加到左侧数组的右侧数组;对于两个数组中都存在的键,将使用左侧数组中的元素,而右侧数组中的匹配元素将被忽略。 所以如果你这样做 你会得到 因此,的逻辑等效于以下代码段: 如果您

  • 问题内容: Java的运算符等效于什么(在C#中)? (为澄清起见,我不是指and 运算符。) 问题答案: 在C#中,可以使用无符号整数类型,然后使用和执行您期望的操作。有关移位运算符的MSDN文档为您提供了详细信息。 由于Java不支持无符号整数(除之外),因此需要此附加运算符。