为什么char *可以在C中包含一个char?

Anirban Nag'tintinmj'

这听起来太疯狂了,但我只是想了一下。在C中为什么

char *pc = 'H';      // single character
char *ps = "hello";  // a string

两者都有效吗?我的意思是为什么achar*可以保存/引用一个字符以及一个以null结尾的字符串?

为什么有用于产生无保护条款或编译器错误*pc作为char*不持有终止字符串空?

我在Ideone对其进行了检查,但未收到任何警告。

阿杰
char *pc = 'H';

上面的语句定义pc了type char *,这意味着它可以保存type对象的地址char您正在使用字符H(另一种类型)对其进行初始化请记住,字符文字是类型的,int并且求值为其字符代码,在ASCII中为72因此,以上陈述等同于

char *pc = 72;

这是非法操作,编译器应对此发出警告(在gcc中,使用flag -Wall)。您不应该直接为指针分配地址,因为您不知道是否可以访问内存地址。您应该使用address of运算符&获取对象的地址,然后将其分配给指针。

char *ps = "hello"; 

在上面的语句中,字符串文字计算为指向其第一个元素的指针。该地址被分配给ps相同类型的地址char *但是,字符串文字在中是只读的,C但没有const限定(与中不同C++),因此尝试使用指针修改字符串文字ps不会导致编译器错误,但会导致未定义的行为以及最有可能由于segfault导致程序崩溃。因此,您应该定义ps一个指向const的指针object-

const char *ps = "hello";

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么std :: cout可以打印一个char []?

来自分类Dev

为什么std :: cout可以打印一个char []?

来自分类Dev

为什么是char类型?

来自分类常见问题

为什么将\ 0定义为C中char数组的第一个元素?

来自分类Dev

为什么Char有一个Bounded实例?

来自分类Dev

为什么Char有一个Bounded实例?

来自分类Dev

使用printf(“%s”,..)打印结构,该结构的第一个变量类型是'char *',为什么可以获取存储在'char *'中的正确字符串?

来自分类Dev

为什么测试char等于相同的char?

来自分类Dev

为什么sizeof(char + char)返回4?

来自分类Dev

为什么 strcpy 返回 char * 而不是 char

来自分类Dev

为什么不替换char?

来自分类Dev

C中char数组的最后一个char

来自分类Dev

为什么从char中错误地减去?

来自分类Dev

为什么在C语言中(char)+(char)=(int)?

来自分类Dev

为什么可以在main中返回const char *?

来自分类Dev

为什么在C语言中char是1个字节

来自分类Dev

为什么C使用两个单引号而不是一个来分隔char文字?

来自分类Dev

为什么使用 char 变量从文件中读取一个字符又吃了一个下一个字符?

来自分类Dev

为什么我可以将char *隐式转换为const char *,而不是无符号char *

来自分类Dev

为什么我的char *无法正确通过?

来自分类Dev

为什么String []比char []占用更多的空间?

来自分类Dev

为什么此char *何时更改值?

来自分类Dev

为什么`execvp`接受`char * const argv []`?

来自分类Dev

为什么DataInputStream无法正确读取char?

来自分类Dev

为什么char *和int *表现不同

来自分类Dev

为什么要使用Char而不是String?

来自分类Dev

为什么此char *何时更改值?

来自分类Dev

为什么在输出期间转换char值?

来自分类Dev

为什么 source 用 char 操作?

Related 相关文章

  1. 1

    为什么std :: cout可以打印一个char []?

  2. 2

    为什么std :: cout可以打印一个char []?

  3. 3

    为什么是char类型?

  4. 4

    为什么将\ 0定义为C中char数组的第一个元素?

  5. 5

    为什么Char有一个Bounded实例?

  6. 6

    为什么Char有一个Bounded实例?

  7. 7

    使用printf(“%s”,..)打印结构,该结构的第一个变量类型是'char *',为什么可以获取存储在'char *'中的正确字符串?

  8. 8

    为什么测试char等于相同的char?

  9. 9

    为什么sizeof(char + char)返回4?

  10. 10

    为什么 strcpy 返回 char * 而不是 char

  11. 11

    为什么不替换char?

  12. 12

    C中char数组的最后一个char

  13. 13

    为什么从char中错误地减去?

  14. 14

    为什么在C语言中(char)+(char)=(int)?

  15. 15

    为什么可以在main中返回const char *?

  16. 16

    为什么在C语言中char是1个字节

  17. 17

    为什么C使用两个单引号而不是一个来分隔char文字?

  18. 18

    为什么使用 char 变量从文件中读取一个字符又吃了一个下一个字符?

  19. 19

    为什么我可以将char *隐式转换为const char *,而不是无符号char *

  20. 20

    为什么我的char *无法正确通过?

  21. 21

    为什么String []比char []占用更多的空间?

  22. 22

    为什么此char *何时更改值?

  23. 23

    为什么`execvp`接受`char * const argv []`?

  24. 24

    为什么DataInputStream无法正确读取char?

  25. 25

    为什么char *和int *表现不同

  26. 26

    为什么要使用Char而不是String?

  27. 27

    为什么此char *何时更改值?

  28. 28

    为什么在输出期间转换char值?

  29. 29

    为什么 source 用 char 操作?

热门标签

归档