假设我有以下内容:
char *a = "Learning CPP";
char *b = "Learning CPP";
我可以说使用的总内存是sizeof(a)而不是2 * sizeof(stringliteral)吗?
因为我对String文字的理解是存储了字符串的一个副本。但无论如何,
它不是存储在内存中的a,a + 1,a + 2 ..... a + 12地址之间,还是存储在内存中的b,b + 1,b + 2 ... b + 12之间(12是sizeof串)?
如何找到字符串文字的地址?
您已经找到了字符串文字的地址。字符串文字的值是其第一个字符的地址。您已将该值分配给a
和b
。
我可以说使用的总内存是sizeof(a)而不是2 * sizeof(a)吗?
首先,这个问题的格式不正确。sizeof(a)
是指针的大小。
您打算问:
我是否可以说用于字符串文字的总内存是一个字符串的一个副本所需的大小,而不是该字符串的两个副本所需的大小?
否。那是编译器的实现细节。它可以选择内嵌字符串,也可以不选择临时存储。如果您修改其中一个字符串,则实现定义是否观察到另一个字符串被修改。
这是一个更普遍的事实的结果,如果您修改其中一个字符串,则由实现定义,周期。什么都可能发生。
我对字符串文字的理解是存储了字符串的一个副本。
您的理解是错误的。那不是语言的保证。这是编译器可以选择进行或不进行的优化。
它不是存储在内存中的a,a + 1,a + 2 ..... a + 12地址之间,还是存储在内存中的b,b + 1,b + 2 ... b + 12之间(12是sizeof串)?
我不明白这个问题。什么不被存储?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句