char *p = "a";
有效,但不是int *p = 2;
和char *p = 'a';
他们为什么这样设计?指针初始化
指针初始化
回答
任何东西C.So
char *p = " a"
被视为字符串说你逝去的字符串的基地址为char pointer.which是有效的。
int *p
说p
是一个整数指针,所以p
可以容纳一个地址为整数,所以int *p = 2
是无效的。
同样char *p
是指向性格让p
可容纳一个字符的地址,以便char *p = 'a'
是无效的,因为'a'
只是一个字符不能解决字符。
因为"a"
有一个类型的char *
,并2
没有一个类型的int *
。请注意0也是无效的。
一个字符串文字类型是char[n]
,并且指派给char*
没问题。
点都是指针。
char *p = "a";
意味着p
点串"a"
(在存储器中的某些地方,的"a"
类型为char[2]
)。
p 23 24
+----+ +----+----+
| 23 | | a | \0 |
+----+ +----+----+
而2
和'a'
是整型值,不是一个有效的地址因此,以下声明是错误/警告:"initialization makes pointer from integer without a cast"
int *p = 2; and
char *p = 'a';
实际上,由于历史原因,字符串文字具有'char *'类型,即使您不应该尝试修改其内容。 –
严格来说,字符串文字是一个数组,而不是指针。它(和其他数组一样)在大多数情况下衰减为指向其第一个元素的指针。 –
@CarlNorum你的意思是'char []'不是'const char *'? –
- 1. 指针初始化
- 2. 初始化指针
- 3. 初始化指针数组的指针
- 4. 指针vs零初始化指针
- 5. 字符指针初始化
- 6. 指针初始化问题
- 7. 初始化指针数组
- 8. 初始化函数指针
- 9. 指针的初始化
- 10. 模板指针初始化
- 11. 初始化指针在C++
- 12. 初始化指针数组
- 13. 初始化指针的typedef
- 14. 指针初始化疑问
- 15. 指针 - 初始化元素
- 16. 初始化结构指针
- 17. 指针在初始化
- 18. 初始化堆栈指针
- 19. 在初始化指针
- 20. 字符指针初始化
- 21. TCHAR指针初始化
- 22. 的char *指针初始化
- 23. 指针初始化:何时将NULL分配给已初始化的指针?
- 24. 如何初始化指针指向C中的指针结构?
- 25. 用指向指针的指针初始化矩阵?
- 26. C++:初始指针
- 27. 通用迭代器/指针初始化
- 28. SWIG python初始化指针为NULL
- 29. 初始化字符串使用指针
- 30. 初始化一些空指针节点
“while”和“do ... while”的必要性是什么?不应该“够”吗?技术上是的,但所有三个都给出了更清楚地表达自己的选项。 – Jon
1)“a”在内存中有一些不变的地址,但不是2。 2)在**之前**或**之前增加**。 –
“a”是一个可以转换为char *的char []。 – user1937198