可能的重复:
C 中 char s[] 和 char *s 有什么区别? https://stackoverflow.com/questions/1704407/what-is-the-difference-between-char-s-and-char-s-in-c
有什么区别char a[]="string";
and char *p="string";
?
第一个是数组,另一个是指针。
数组声明“char a[6];
“要求留出六个字符的空间,以便通过名称来识别”a.
" 即有一个位置名为 "a
" 可以容纳六个字符。指针声明 "char *p;
“ 另一方面,请求一个保存指针的位置。该指针通过名称来识别”p,
" 并且可以指向任何地方的任何字符(或连续的字符数组)。
声明
char a[] = "hello";
char *p = "world";
将产生可以表示如下的数据结构:
+---+---+---+---+---+---+
a: | h | e | l | l | o |\0 |
+---+---+---+---+---+---+
+-----+ +---+---+---+---+---+---+
p: | *======> | w | o | r | l | d |\0 |
+-----+ +---+---+---+---+---+---+
重要的是要认识到,像 x[3] 这样的引用会根据 x 是数组还是指针生成不同的代码。根据上面的声明,当编译器看到表达式 a[3] 时,它会发出从位置“a”开始的代码,将其移过 3 个位置,然后获取那里的字符。当它看到表达式 p[3] 时,它会发出代码从位置“p”开始,获取那里的指针值,将指针加 3,最后获取指向的字符。在上面的示例中,a[3] 和 p[3] 恰好都是字符“l”,但编译器的处理方式有所不同。
您可以使用搜索,互联网上有大量关于该主题的解释。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)