这个char*变量指向哪里?

  • 本文关键字:char 变量 这个 c++ char
  • 更新时间 :
  • 英文 :


我想知道s*s是什么意思?s指向哪里?

char *s = "my name"
cout<<*s<<endl;
cout << s << endl;
cout << &s << endl;
cout << s+1 << endl;
cout << &(s+1) <<endl;   //error code

我输出:

M
My name
0x61fe18
y name

A符合编译器可能会显示类似的警告:

warning: ISO C++11 does not allow conversion from string literal to 'char *' [-Wwritable-strings]

这是因为在标准c++中,如果你想用字符串字面值初始化char*,你需要让它为const,因为c++中引号括起来的字符串是const chars的集合。

const char* s = "my name";声明了一个指针,指向以空结束的常量字符串&;my name&;指针将指向第一个元素(const char),但是如果您尝试这样打印s:

cout << s << endl;

记住:s是一个指针返回null结束的字符串.

每个后续的const char将被打印,直到找到空终止符

然而,正如s指向第一个const char,如果你试图"强行"打印s的value-at-address,用:

cout << *s << endl;

打印字符串的第一个字母。

现在,来看看:

cout << s+1 << endl;

作为s,又是一个指针返回null结束的字符串并指向字符串的第一个const char,如果我们对它做一些算术运算,加1,我们只会增加s的值,指针,走向后续的const char。但是请记住,当您声明了指向const char序列的指针时,这些字符将位于的其他位置比你想象的要多。注意最后一行:

cout << &(s+1) << endl

它会给你一个错误,因为(s+1)是右值,这基本上意味着它没有一个定义的内存地址。在计算期间,它可能存储在某个注册表位置。这基本上就像说&1,当然,1没有指针。

最新更新