如何查找字符串文字的地址
How can I find the address of a String Literal?
假设我有以下内容:
char *a = "Learning CPP";
char *b = "Learning CPP";
我可以说使用的总内存是sizeof(a(而不是2*sizeof(stringlateral(吗?
因为我对字符串文字的理解是存储字符串的一个副本。但是,
它不是存储在a、a+1、a+2之间吗。。。。。存储器中的a+12地址以及b、b+1、b+2。。。内存中的b+12(12是字符串大小(?
如何查找字符串文字的地址?
您已找到字符串文字的地址字符串文字的值是其第一个字符的地址。您已将该值指定给a
和b
。
我可以说使用的总内存是sizeof(a(而不是2*sizeof(a(吗?
首先,这个问题是错误的。sizeof(a)
是指针的大小。
你想问:
我可以说,用于字符串文字的总内存是字符串的一个副本所需的大小,而不是字符串的两个副本所需要的大小吗?
没有。这是编译器的实现细节。它可能会随心所欲地选择实习或不实习。如果修改其中一个字符串,那么是否观察到另一个字符串被修改是由实现定义的。
这是一个更普遍的事实的结果,即如果您修改其中一个字符串,它是由实现定义的,周期。任何事情都有可能发生。
我对字符串文字的理解是存储字符串的一个副本。
你的理解是错误的。这并不是语言的保证。这是一个编译器可以选择进行或不进行的优化。
它不是存储在a、a+1、a+2之间吗。。。。。存储器中的a+12地址以及b、b+1、b+2。。。内存中的b+12(12是字符串大小(?
我不能理解这个问题。没有存储的"it"是什么?
以下代码将显示变量和字符串的位置
printf( "variable a is at address %pn", &a );
printf( "variable b is at address %pn", &b );
printf( "the string that a points to is at address %pn", a );
printf( "the string that b points to is at address %pn", b );
请注意,最后两行可能打印相同的地址,也可能不打印,具体取决于编译器。编译器不需要只创建一个字符串。
您可以自己检查。例如
if ( a == b ) std::cout << "The string literals are coincide" << std::endl;
else std::cout << "The string literals occupy different areas of memory" << std::endl;
通常编译器有一些选项,可以控制两个相同的字符串文字是否会占用相同的内存,或者每个文字是否会分配到自己的内存区域。
我可以说使用的总内存是sizeof(a(而不是2*sizeof(a(吗?-->否,sizeof(a(就是sizeof(char*(=4
它不是存储在a、a+1、a+2之间吗。。。。。存储器中的a+12地址以及b、b+1、b+2。。。内存中的b+12(12是字符串大小(?-->使用gcc编译器,当字符串相等时,a和b是相同的地址。当字符串不同时,我发现不同的a和b是不同的地址。(嘿,这是一个有趣的练习。我学到了一些新东西(
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
char const* p ="Hello";
printf("%d",p); //prints the address of the first byte. ie of 'H'
cout<<p[0] // prints H
cout<<p[1] //prints e
}
您可以用C或C++来确定字符串文字的地址。
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 如何使用字符串文字作为宏参数
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 构造<int>具有 2 个字符串文字的向量
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 方便地对C++中的所有字符串文字进行模糊处理
- 比较 std::string 和 C 样式字符串文字
- 如何从char16_t字符串文字中读取双精度?
- 如果我在块中编写字符串文字,是否会从数据部分复制整个字符串数据?
- C++ 不能在cout中使用向量和字符串文字
- 为什么必须将 const 添加到 constexpr 中才能进行字符串文字声明?
- C++:Unicode 字符串文字的可移植性
- 返回空字符串文字 VS. 返回空点 - 它们是一样的吗?
- 确保字符指针始终指向相同的字符串文字
- 如何按照 Google C++风格指南连接字符串文字?
- 通过 constexpr 中的 'const char *' glvalue 访问字符串文字的值会出错
- 字符串文字到 char 数组的转换如何在C++中实际工作
- 另一个字符串文字,UDL 迷宫
- strlen 是否针对字符串文字进行了优化?
- 用户定义的字符串文字为字符串null终止