-2
A
回答
4
"hello"
是一个字符串文字。字符串文字对象是一个char
数组类型,并且被C指定为不可修改。这意味着试图修改它会调用未定义的行为。
const char* s = "hello";
现在提供上面s
的声明是一个指向字符串文字对象"hello"
。它指向字符串的第一个字符。通过将其限定为const
,您向编译器作出承诺,即不会使用s
指针修改指向的内容。
在s
上加上一个整数值的任何指针运算也会产生一个const char *
。例如s + 1
也是const char *
,因此您不能使用s + 1
修改它指向的内容,即例如s[1] = 0
(或等效的*(s + 1) = 0
)无效。
0
相对于该定义
const char* s = "hello";
然后指针定义这样一种方式,它指向类型为const char的对象。所以指针指向的对象,在这种情况下,它是字符串文字的第一个字符可能不会被改变。
考虑到您可以重新分配指针。例如
const char* s = "hello";
//...
char c = 'A';
s = &c;
虽然与名称C的对象不是一个常量对象本身仍然是指针指向s的标识const,并假设它指向const的数据,你可能无法使用该指针改变对象。
在另一方面,虽然字符串字面本身使用C具有类型(非const)字符数组,你可能不会改变他们,即使你将宣布指针这样
char* s = "hello";
任何企图修改字符串文字会导致未定义的行为。允许实现将字符串文字放在只读存储器中。
相关问题
- 1. const char *不只是一个字符?
- 2. const char *参数只给出第一个字符(在python3上)
- 3. 是一个常量字符指针,指向一个常量字符或指向字符的常量指针吗?
- 4. 将非常量字符数组传递为const char数组是可能的吗?
- 5. 决定是否const char *是一个字符串文字或变量
- 6. 我可以从C#中的const char初始化一个常量字符串吗?
- 7. 为const char *有垃圾字符(县),它是从功能
- 8. C++如何确定char是否是一个字中的第一个字符
- 9. C - 我可以从char *创建一个const char *变量吗?
- 10. NSString为char(不是const char)
- 11. 通常是第一个字符为大写的静态变量吗?
- 12. mingw const char字符串显然不是const
- 13. 设置一个const char *等于char []文字安全吗?
- 14. 从签名为const char *类型转换为字符常量*
- 15. 'char const * const c =“”''的意思是
- 16. 常量char *的字符串构造函数改变常量char *的值?
- 17. 只有第一个字符是将用C
- 18. 从`为const char * '到'字符*'
- 19. 从“为const char *”到“字符*”
- 20. LTRIM/RTRIM - 但只限于第一个/最后一个字符是空格吗?
- 21. LINQ的只是第一个数字
- 22. C++ char const char *
- 23. 是否有可能只获得一个字符串的第一个字符?
- 24. const无符号字符*转换为/从字符串或const char *
- 25. 不是const应该是常量?
- 26. const的无符号字符*为char *
- 27. 如何判断const char *是否指向有效的字符串?
- 28. 确定NSString的第一个字符是否是一个数字
- 29. 是不是字符串[Char]?
- 30. 得到第一个字符从*的char []变量用C
整个字符串(即使没有'const'),字符串文字通常放在只读段中。 – 2015-03-02 18:59:20
此外,C没有字符串...只是char数组或字符指针。 – ForceBru 2015-03-02 18:59:56
@ForceBru:每个人都会调用这些东西(C)字符串。 – 2015-03-02 19:00:28