我几乎可以肯定,你根本不明白数组和指针在C和C++。
数组如何在C和C++中工作?
char str[]="banti is a nice girl";
该行创建一个字符数组。
['b','a','n','t','i',' ','i','s',' ','a',' ','n','i','c','e',' ','g','i','r','l','\0']
^
str
阵是你必须[]
之间是什么,它的存储在内存中的某个地方;
您可以通过指针str
访问它。
str+6
意味着指针str
将6
元素移动到它指向的元素之后。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
{'b','a','n','t','i',' ','i','s',' ','a',' ','n','i','c','e',' ','g','i','r','l','\0'}
^ ^
str str+6
str[6]
意味着*(str+6)
,这意味着得到str+6
的价值。
str
char*
是,str+6
也char*
,但*(str+6)
是char
,等于'i'
;
char
不能隐式转换为char*
。
什么是printf
,当你给它的格式为字符串%s
?
它期望你给它char*
(指针指向char
);
它使的char*
你给(让我们命名副本copy
),并执行类似副本:
while((*copy)!='\0'){
//print out *copy;
++copy;
}
所以,它打印char
从后阵char
,直至符合'\0'
。
此代码无法编译,您在第一行中缺少'*'。 – 2014-09-28 08:50:36
编辑该程序。 – Rishu 2014-09-28 08:51:50
'str [6]'是'char',而不是'char *'。 'str'表示'str'的第一个元素的地址已经被评估为一个指针。 – BLUEPIXY 2014-09-28 08:52:05